class Base
{
public:
int i;
Base()
{
cout<<"Base Constructor"<<endl;
}
Base (Base& b)
{
cout<<"Base Copy Constructor"<<endl;
i = b.i;
}
~Base()
{
cout<<"Base Destructor"<<endl;
}
void val()
{
cout<<"i: "<< i<<endl;
}
};
class Derived: public Base
{
public:
int i;
Derived()
{
Base::i = 5;
cout<<"Derived Constructor"<<endl;
}
/*Derived (Derived& d)
{
cout<<"Derived copy Constructor"<<endl;
i = d.i;
}*/
~Derived()
{
cout<<"Derived Destructor"<<endl;
}
void val()
{
cout<<"i: "<< i<<endl;
Base::val();
}
};
Nếu tôi làm Có nguồn gốc d1; Có nguồn gốc d2 = d1; Các nhà xây dựng bản sao của cơ sở được gọi là và xây dựng bản sao mặc định của nguồn gốc được gọi là.Trình tạo bản sao cơ sở không được gọi là
Nhưng nếu tôi xóa nhận xét khỏi hàm tạo bản sao có nguồn gốc thì hàm tạo bản sao cơ sở sẽ không được gọi. Có lý do cụ thể nào cho việc này không? Cảm ơn trước.
IMVHO http://www.parashift.com/c++-faq-lite/ctors.html là một tài nguyên tuyệt vời để hiểu các nhà xây dựng C++. (Và trên thực tế, C++ FAQ Lite nói chung là một nguồn thông tin đáng kinh ngạc cho người mới bắt đầu nâng cao.) – notJim
Tôi nghĩ rằng bạn cơ bản destructor nên được ảo. –