我正在制作一个由unique_ptr管理的类,但是由于各种原因,我需要允许实现访问该对象的原始指针。但是,我想确保用户不会无意中删除基础对象。我提出了以下示例代码:
(它是树结构的一部分,我需要能够查看树节点的成员而无需实际分离它们。在这种情况下,shared_ptr似乎过分了。)

#include <memory>

using namespace std;

class unOnly
{
    ~unOnly() {}
public:
    unOnly() {}
    friend class default_delete<unOnly>;
};

int main()
{
    unique_ptr<unOnly> ptr(new unOnly());
}

这在gcc 4.4.5中为我编译。但是,我可以确定在所有实现中default_delete实际上是delete的对象,而不是某些私有(private)实现类吗?我应该确定自己编写删除器吗?

最佳答案

为什么不

class unOnly
{
    unOnly() {}
    ~unOnly() {}
    struct deleter { void operator()(unOnly* x) { delete x; }};

public:
    typedef std::unique_ptr<unOnly, deleter> handle;

    static handle create() { return handle(new unOnly); }
};

auto x = unOnly::create();

?甚至
class unOnly
{
    ~unOnly() {}
    struct deleter { void operator()(unOnly* x) { delete x; }};

public:
    unOnly() {}
    typedef std::unique_ptr<unOnly, deleter> handle;
};

unOnly::handle x(new unOnly);

(我更喜欢前者,但后者也许更符合您的要求)

关于c++ - unique_ptr:如何安全共享原始指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11455989/

10-11 18:00