将唯一指针的指针传递给采用双指针的函数

K. *_*res 1 c++ pointers unique-ptr

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

void foo(Class** c)
{
    // memory checks and stuff
    (*c) = new Class();
    // more stuff
}
Run Code Online (Sandbox Code Playgroud)

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

Class* c = nullptr;
foo(&c);
if (c)
{
    // stuff
}
delete c;
Run Code Online (Sandbox Code Playgroud)

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

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

我意识到我可以创建原始指针和唯一指针,调用函数,然后将原始指针指向唯一指针,但我宁愿不这样做。有没有办法做我想做的事?

Jar*_*d42 8

创建一个包装foo

std::unique_ptr<Class> foo()
{
    Class* c = nullptr;
    foo(&c);
    return std::unique_ptr<Class>(c);
}
Run Code Online (Sandbox Code Playgroud)