首页 > 解决方案 > 将唯一指针的指针传递给采用双指针的函数

问题描述

我有一个功能可以有效地做到这一点

void foo(Class** c)
{
    // memory checks and stuff
    (*c) = new Class();
    // more stuff
}

我无法更改此功能。要调用这个函数,我必须做这样的事情。

Class* c = nullptr;
foo(&c);
if (c)
{
    // stuff
}
delete c;

我非常喜欢使用 astd::unique_ptr而不是原始指针。但是,我不知道如何获取内部指针的地址。显然,下面的清单无法编译,因为我正在尝试获取右值的地址。

std::unique_ptr<Class> c = nullptr;
foo(&(c.get()));
if (c)
{
    // stuff
}

我意识到我可以制作原始指针和唯一指针,调用函数,然后将原始指针提供给唯一指针,但我不想这样做。有没有办法做我想做的事?

标签: c++pointersunique-ptr

解决方案


创建一个包装器foo

std::unique_ptr<Class> foo()
{
    Class* c = nullptr;
    foo(&c);
    return std::unique_ptr<Class>(c);
}

推荐阅读