我使用智能指针,并试图总结我的头周围最好使用它盯着。我读过大量的文章,但我很困惑在下面的例子中使用哪一个。我已经包含了shared_ptr
和unique_ptr
例子来说明什么,我试图完成:shared_ptr的VS的unique_ptr使用类和儿童
class A
public:
A();
private:
unique_ptr<B> ptrB;
unique_ptr<SomeObject> ptrUnique;
shared_ptr<SomeObject> ptrShared;
A::A()
{
ptrB(new B());
ptrUnique(new SomeObject());
ptrB->PassUnique(ptrUnique);
ptrShared(new SomeObject());
ptrB->PassShared(ptrShared);
}
class B:
pubic:
void PassUnique(unique_ptr<SomeObject> &ptr_unique);
void PassShared(weak_ptr<SomeObject> &ptr_weak);
void DoSomething();
private:
unique_ptr<SomeObject> ptrUnique;
weak_ptr<SomeObject> ptrWeak;
B::PassUnique(unique_ptr<SomeObject> &ptr_unique)
{
ptrUnique = ptr_unique;
}
B::PassShared(weak_ptr<SomeObject> &ptr_weak)
{
ptrWeak = ptr_weak;
}
B::DoSomething()
{
ptrUnique->SomeMethod();
shared_ptr<SomeObject> ptr1 = ptrWeak.lock();
ptr1->SomeMethod();
}
SomeObject类可以是任何类。一个很好的例子是我从父类A传递的数据库句柄,它最初是由多个类(如B)启动的,并且从B到C(如果存在)。我的问题是,如果我传递一个unique_ptr作为参考将设置例如ptrUnqiue = ptr_unique
B:PassUnique创建一个副本,然后是不正确的?或者应该通过shared_ptr完成?这种理解与我的智能指针混淆,并希望澄清。
你不能这样做'ptrUnique = ptr_unique' ..所以你的问题似乎有点空洞。 http://en.cppreference.com/w/cpp/memory/unique_ptr/operator%3D – Default
谢谢我不太确定使用情况。 – adviner