gpt4 book ai didi

c++ - std::shared_ptr 在复制对象时导致问题

转载 作者:太空宇宙 更新时间:2023-11-04 11:39:28 24 4
gpt4 key购买 nike

<分区>

我有一个类,它有一个 shared_ptr 成员。此类的构造函数采用分配给其成员的 shared_ptr 对象。现在的问题是,如果我将此对象分配给同一类的另一个对象,两者都指向相同的 shared_ptr。我不想这样做。这是类似于我的代码的代码,但是当我进行分配时,它在 shared_ptr 交换处崩溃。请帮助我按照我想要的方式工作。

如果执行 obj2=*obj1 行,您会看到,新的 shared_ptr 在构造函数中创建,然后调用赋值,其中 swap 将获取 rhs 上的临时 shared_ptr 并最终以递归方式终止堆栈。

class A
{
public:
virtual ~A(){};
virtual void Test()
{
}
int i;
int j;
};

class C:public A
{
public:

void Test()
{
}

};


class B
{
public:
B::B(const B& rhs) : m_Command(std::make_shared<A>(*rhs.m_Command))
{


}
B::B(B&& rhs) : m_Command(std::move(rhs.m_Command))
{

}
B& B::operator=(B rhs)
{
std::swap(*this, rhs);
return *this;
}

B()
{

}

B(std::shared_ptr<A> command)
{
m_Command=command;
}
void Test()
{

}
std::shared_ptr<A> m_Command;
};

int _tmain(int argc, _TCHAR* argv[])
{
std::shared_ptr<A> cmd(new C());
B *obj1=new B(cmd);
B obj2;
obj2=*obj1;
cmd->i=10;
cmd->j=20;



return 0;
}

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com