提问者:小点点

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


我有一个函数可以有效地实现这一点

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

我不能改变这个功能。 要调用这个函数,我必须这样做。

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

我非常希望使用std::unique_ptr而不是原始指针。 但是,我不知道如何获得内部指针的地址。 下面的清单显然无法编译,因为我试图获取rvalue的地址。

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

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


共2个答案

匿名用户

创建foo的包装器:

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

匿名用户

你的手被函数的API束缚住了。

我个人认为最好的解决方案是做您所说的您不希望做的事情:在调用函数之后创建unique_ptr。

如果您经常调用这个函数,或者您有很多类似的函数,我将创建一个包装器函数,它在本地创建原始指针并返回UNIQUE_PTR。