这是对unique_ptr的误用吗?

Taz*_*ngo 4 c++ c++11 c++14

我正在转向智能指针,我正在努力确保我正确使用它们.有很多问题涉及何时使用每个问题,但我无法找到关于吸气剂的具体问题.

我有一个拥有指针的类,我希望其他类能够访问该指针(在步骤中重构遗留代码).我想给类一个unique_ptr,因为它只拥有该对象,但是它们无法复制.我应该返回对unique_ptr的引用,还是只使用shared_ptr?

class B
{
 public:
    doAction() {};
};

class A
{
 private:
    std::unqiue_ptr<B> pointer;

 public:
    std::unique_ptr<B>& GetPointer()
    {
        return pointer;
    }

};

a.GetPointer()->doAction();
Run Code Online (Sandbox Code Playgroud)

Ane*_*dar 6

如果另一个类需要存储指针并且可能比A类寿命更长,请使用a shared_ptr.

如果没有,并且你的B物体应该在破坏A时被破坏,这是一个完全有效的使用unique_ptr.

正如评论中所指出的,只有在允许其他类更改指针时才会出现这种情况.如果没有,返回一个原始指针.

两者之间的区别不在于谁有权访问该类,而是关于谁负责销毁引用的对象.


Som*_*ken 5

如果代码只需要B通过unique_ptr 访问一个对象,那么你最好只返回原始指针pointer.get();.请记住,原始指针并不坏,拥有原始指针.