Eut*_*rpy 3 c++ copy-constructor shared-ptr
我有一个名为的类classA,如下所示:
class classA {
private:
char* data;
public:
classA(const classA&) = delete;
~classA();
};
~classA()
{
delete[] data;
}
Run Code Online (Sandbox Code Playgroud)
在另一个类中,让我们调用它classB,作为成员,我有一个共享指针classA:
class classB
{
private:
std::shared_ptr<classA> ptrA;
public:
classB(std::shared_ptr<classA>);
};
classB(std::shared_ptr<classA> sp) : ptrA(sp)
{}
Run Code Online (Sandbox Code Playgroud)
这是我实例化我的方式classB:
classA ca;
classB cb(std::make_shared<classA>(ca));
Run Code Online (Sandbox Code Playgroud)
这给了我以下错误:
试图引用已删除的功能
显然,我试图引用我定义的复制构造函数deleted(有一个原因,不应复制此类的对象).但我很困惑为什么复制构造函数被调用,因为我传递共享指针,以及如何避免这种情况.
您正在调用复制构造函数来尝试创建共享指针.
std::make_shared<classA>(ca)
^^ constructs the classA using these parameters
Run Code Online (Sandbox Code Playgroud)
您可以调用make_shared<classA>()以创建指向默认构造的共享指针classA.或者选择另一个构造函数.