这是使用unique_ptr的正确方法吗?

时间:2016-03-02 03:47:29

标签: c++ unique-ptr

我有一个原始指针,并希望回调拥有它。我想出了这段代码:

A* a = new A();
dosomething(callback(unique_ptr<A>(a).get()))

// The callback always takes a raw pointer.
void callback(A* a) {
}

这是正确的方法吗?

2 个答案:

答案 0 :(得分:1)

不,callback不拥有它。但是,它会在dosomething完成后销毁。

如果您构建dosomething以进行回调和A *,那么dosomethingcallback作为参数调用A *,它可以只要创建的unique_ptr仅在执行期间使用,就可以正常工作。

示例:

void callback(A *a)
{
    if (!a) return;
    std::cout << "Got A " << a->name() << std::endl;
}

void dosomething(const std::function<void(A *)> &func, std::unique_ptr<A> obj)
{
    std::cout << "Doing some operation..." << std::endl;
    func(obj.get());
}

int main()
{
    dosomething(callback, std::make_unique<A>());
}

答案 1 :(得分:0)

我会简化整个事情并使用std::shared_ptr

auto a = std::make_shared<A>();
callback(a);

这需要您将callback声明为首先获得std::shared_ptr的人。

当然,callback没有返回任何内容有点奇怪..