C++ 复制构造函数 : attempting to reference a deleted function

标签 c++ shared-ptr copy-constructor

我有一个名为 classA 的类,如下所示:

class classA {
    private:        
        char* data; 
    public:
        classA(const classA&) = delete;
        ~classA();      
    };

~classA()
    {
        delete[] data;
    }

在另一个类中,我们称它为 classB,我有一个指向 classA 的共享指针作为成员:

class classB
    {
    private:
        std::shared_ptr<classA> ptrA;
    public: 
        classB(std::shared_ptr<classA>);
    };

classB(std::shared_ptr<classA> sp) : ptrA(sp)
    {}

这就是我如何实例化我的 classB:

classA ca;
classB cb(std::make_shared<classA>(ca));

这给了我以下错误:

attempting to reference a deleted function

显然,我正在尝试引用我定义为 deleted 的复制构造函数(这是有原因的,不应复制此类的对象)。但是我很困惑为什么要调用复制构造函数,因为我正在传递一个共享指针,以及如何避免这种情况。

最佳答案

您正在调用复制构造函数来尝试创建共享指针。

std::make_shared<classA>(ca)
                         ^^ constructs the classA using these parameters

您可以调用make_shared<classA>()创建指向默认构造的共享指针 classA .或者选择另一个构造函数。

关于C++ 复制构造函数 : attempting to reference a deleted function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49807257/

相关文章:

c++ - 为什么在复制赋值之前调用复制构造函数?

c - 有复制 Gtk 小部件的好方法吗?

c++ - Poco C++ 构建嵌套的 JSON 对象

c++ - Qt:按下按钮时显示多个窗口

c++ - 在多维 vector 中插入元素

C++:访问 shared_ptr 的容器应该返回原始还是共享 ptr?

c++ - 在类的构造函数中为常量动态大小数组赋值

c++ - 为什么我的程序在 boost::enable_shared_from_this<>/boost::shared_ptr<> 中崩溃?

c++ - 如何为我自己的 shared_ptr 实现自己实现别名构造函数?

c++ - C++ 拷贝构造函数中的 const