Tôi đang đọc Effective C++ và đã xem qua ví dụ này:Tại sao static_cast (* này) thành một lớp cơ sở tạo một bản sao tạm thời?
class Window { // base class
public:
virtual void onResize() { ... } // base onResize impl
...
};
class SpecialWindow: public Window { // derived class
public:
virtual void onResize() { // derived onResize impl;
static_cast<Window>(*this).onResize(); // cast *this to Window,
// then call its onResize;
// this doesn't work!
... // do SpecialWindow-
} // specific stuff
...
};
Cuốn sách này nói:
Những gì bạn có thể không mong đợi là nó không gọi hàm trên đối tượng hiện tại ! Thay vào đó, các diễn viên tạo ra một bản sao mới, tạm thời của phần cơ sở lớp * này, sau đó gọi onResize trên bản sao!
Tại sao static_cast (ở trên mã) tạo bản sao mới? Tại sao không chỉ sử dụng phần lớp cơ sở của đối tượng?
Nếu nó được truyền tới 'static_cast (* this) .onResize();', thì tôi nghĩ nó sẽ sử dụng đối tượng hiện tại. (Lưu ý '&'). Không chắc chắn mặc dù. –
static_cast (this) -> onResize(); cũng sẽ hoạt động nhưng tất nhiên là Window :: onResize(); là đúng ở đây. –
Trass3r