C++ c++;编译器创建的默认构造函数
我最近发现了这个页面()。我尝试了一些代码:C++ c++;编译器创建的默认构造函数,c++,C++,我最近发现了这个页面()。我尝试了一些代码: class Base { }; class Derived : public Base { }; int main() { Derived d; Base& b = d; } 我知道编译器在基类中创建构造函数、移动构造函数、复制构造函数和析构函数,并且只在派生类中创建构造函数,因为基类中并没有虚拟析构函数。但当我加上 public : ~Base(){} 然后 public : virtual ~Base(){} 我
class Base {
};
class Derived : public Base {
};
int main() {
Derived d;
Base& b = d;
}
我知道编译器在基类中创建构造函数、移动构造函数、复制构造函数和析构函数,并且只在派生类中创建构造函数,因为基类中并没有虚拟析构函数。但当我加上
public :
~Base(){}
然后
public :
virtual ~Base(){}
我在构造器中看到了一些差异。在第一次添加之后,编译器还会在驱动类中生成move assimment操作符和析构函数,在第二次添加之后—虚拟析构函数、assimment操作符和move assimment操作符。为什么?
Base&b=d代码>只需记住一个地址(作为参考),没有涉及构造函数或析构函数。请比“我看到了一些差异”更具体——将它们包括在您的问题中。需要设置指向vtable的指针,这可能就是您所看到的。“并且只有派生类中的构造函数才是因为没有虚拟析构函数”-啊,不会。派生类不会因为基类有一个非虚拟析构函数而失效。它仍然有自己的一个。但是如果它不可多态,如果我很好地记住C++成员的生成,那么赋值操作符也会比复制构造函数同时生成。我说的是操作符=(const&);