Khi tôi hiểu thời gian chờ, mã sau sẽ hoạt động, nhưng không.C++ tạm thời - "phương pháp ảo thuần túy được gọi là"
struct base
{
virtual~base() {}
virtual void virt()const=0;
};
struct derived:public base
{
virtual void virt()const {}
};
const base& foo() {return derived();}
int main()
{
foo().virt();
return 0;
}
Lệnh gọi hàm virt() đưa ra lỗi "gọi hàm ảo thuần túy". Tại sao vậy, và tôi nên làm gì?
chính xác, vì bảng ảo cũng sẽ được dọn dẹp ... do đó là thông báo. –
@DougT .: Không có "vì" trong "hành vi không xác định". (Ngoài ra, các bảng * ảo * không bao giờ bị "dọn dẹp"). –
Nhưng không nên để đối tượng tạm thời bị phá hủy vào cuối biểu thức đầy đủ, đó là sau khi virt() đã trở lại? – Dave