我有一个名为 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/