C++继承的复制构造函数调用
C++ inherited copy constructor call ?
我有从A类派生的B类。我调用了我自己为类 B 的对象实现的复制构造函数。我还为自己实现了 A 类的构造函数。
当我调用 B 类的复制构造函数时,是否会自动调用此复制构造函数?或者怎么做?这是好方法吗:
A::A(A* a)
{
B(a);
// copy stuff
}
谢谢!
您可以使用构造函数初始化列表执行此操作,如下所示:
B::B(const B& b) : A(b)
{
// copy stuff
}
我修改了语法,因为您的代码没有显示复制构造函数并且与您的描述不一致。
不要忘记,如果你自己实现复制构造函数,你应该遵循三个规则。
复制构造函数具有以下签名:
A(const A& other) //preferred
或
A(A& other)
您的是转换构造函数。除此之外,您需要显式调用基类的复制构造函数,否则将调用默认构造函数:
B(const B& other) { }
相当于
B(const B& other) : A() { }
即不会自动调用来自类 A 的复制构造函数。你需要:
B(const B& other) : A(other) { }
相关文章:
- 当从函数参数中的临时值调用复制构造函数时
- 为什么调用复制构造函数而不是移动构造函数?
- 为用户定义的类正确调用复制构造函数/赋值运算符
- push_back std::vector,则重复调用复制构造函数
- 减少复制构造函数调用
- 为什么调用复制构造函数来构造空unique_ptr向量?
- 复制elision、std::move和链式函数调用
- 为什么转换运算符调用复制构造函数两次,而等效函数只调用它一次
- 我打算调用initializer_list构造函数,如果存在,则事先调用复制构造函数:为什么?
- 构造函数初始值设定项列表未调用复制构造函数
- 为什么在我的代码中调用复制构造函数而不是移动构造函数?
- std::map 在 [] 上调用默认构造函数,在 insert() 上调用复制构造函数
- 通过引用传递对象时是否调用复制构造函数?
- 如果函数按值传递并按值返回,将调用复制构造函数多少次
- 为什么要抛出引用调用复制构造函数的异常?
- 为什么即使参数标记为"const",也会调用复制构造函数?
- Clang-Tidy:移动构造函数通过调用复制构造函数来初始化类成员
- linux 是否"rename"函数调用块,直到复制(当源和目标在不同磁盘中时)完成
- 为什么当我添加一个不同的对象(复制构造函数中的参数)时调用复制构造函数?
- 为什么调用复制构造函数,当我只返回对象 c++ 的引用时