相关疑难解决方法(0)

何时使用shared_ptr以及何时使用原始指针?

class B;

class A
{
public:
    A ()
        : m_b(new B())
    {
    }

    shared_ptr<B> GimmeB ()
    {
        return m_b;
    }

private:
    shared_ptr<B> m_b;
};
Run Code Online (Sandbox Code Playgroud)

假设B是一个在语义上不应该存在于A的生命周期之外的类,也就是说,B对于它自身存在完全没有意义.应该GimmeB退还shared_ptr<B>还是B*

一般来说,完全避免在C++代码中使用原始指针代替智能指针是一种好习惯吗?

我认为shared_ptr只应该在有明确的转让或共享所有权的情况下使用,我认为在函数分配一些内存,用一些数据填充并返回它的情况下很少见,并且有理解在调用者和被调用者之间,前者现在对该数据"负责".

c++ smart-pointers

73
推荐指数
4
解决办法
4万
查看次数

使用std :: unordered_set的std :: unique_ptr

假设我有一组unique_ptr:

std::unordered_set <std::unique_ptr <MyClass>> my_set;
Run Code Online (Sandbox Code Playgroud)

我不确定检查集合中是否存在给定指针的安全方法是什么.这样做的正常方法可能是调用my_set.find (),但我作为参数传递什么?

我从外面得到的只是一个原始指针.所以我必须从指针创建另一个unique_ptr,将它传递给find()然后release()指针,否则对象将被破坏(两次).当然,这个过程可以在一个函数中完成,因此调用者可以传递原始指针并进行转换.

这种方法安全吗?有没有更好的方法来使用一组unique_ptr?

c++ stl unordered-set unique-ptr c++11

26
推荐指数
4
解决办法
6048
查看次数

标签 统计

c++ ×2

c++11 ×1

smart-pointers ×1

stl ×1

unique-ptr ×1

unordered-set ×1