c++ - 是否可以在派生类中使用复制构造函数而不使用基复制构造函数?

标签 c++ inheritance copy-constructor

我是 C++ 新手,从我到现在为止所学到的,当我们从派生类调用复制构造函数时,会调用基类的复制构造函数。假设我在基类的私有(private)区域中有一个复制构造函数。如何在不调用基类的复制构造函数的情况下调用派生类的复制构造函数? (在此代码中,A 没有复制构造函数的实现,这就是我想知道的)。

class NonCopyable
{
protected:
NonCopyable(){}
~NonCopyable(){}
private:
NonCopyable(const NonCopyable& nonCopyable);
NonCopyable& operator=(const NonCopyable& nonCopyable);
};
class A: public NonCopyable
{
};

最佳答案

简单的答案是:是的,这是可能的。

您只需要定义一个专用的 Derived 复制构造函数,它不会调用 NonCopyable 复制构造函数(当然,这在实际的软件应用程序中可能会令人困惑,但这是一个不同的问题):

此类是可构造的,但不能复制构造:

class CannotBeCopied: public NonCopyable {};

此类是可构造的,也可复制构造:

class CanBeCopied: public NonCopyable {
public: 
    CanBeCopied() = default; // needed since otherwise CopyConstructor is only known construtor
    CanBeCopied(const CanBeCopied& b) { } // calls NonCopyable::NonCopyable() default-constructor, which is just protected
};

在这里查看生活示例: http://coliru.stacked-crooked.com/a/60c9fc42fa2dd59a

关于c++ - 是否可以在派生类中使用复制构造函数而不使用基复制构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54989011/

相关文章:

C++ map 问题

c++ - 未捕获的 std::exception 在核心中不正确的堆栈跟踪

c++ - C++ 中编译器优化的影响

c++ - 使用 CreateWindowEx() 创建的窗口中的默认按钮

objective-c - Objective-C 中的脆弱基类是什么?

c++ - c++中继承两个类的一个类

c++ - C++ 多次调用复制构造函数

c++ - 继承和指向 protected 成员的指针

Java - 反射 - 如何调用复制构造函数?

c++ - 如何正确复制给定其 shared_ptr 的对象