std::unique_ptr 作为函数的输出参数
std::unique_ptr as out argument to a function
struct cls{
~cls(){std::cout<<"dtor\n";}
};
void foo(cls** pp){
*pp = new cls;
}
int main()
{
cls* raw_ptr = 0;
foo(&raw_ptr);
std::unique_ptr<cls> u_ptr{raw_ptr};
}
有没有办法直接访问unique_ptr
中的raw_pointer
传递给函数foo(cls** pp)
?
或
cls* raw_ptr = 0;
foo(&raw_ptr);
std::unique_ptr<cls> u_ptr{raw_ptr};
这是唯一的方法吗?
注意:我无法更改函数的签名 foo
。
unique_ptr<>::get() - 它 returns 指向拥有对象的指针,而不释放对象的所有权。
您可以只读 访问unique_ptr
中的指针,方法是使用unique_ptr::get()
。这returns 存储了指针的副本。
但是,我理解你的问题,关于是否有办法在 unique_ptr
原位; 中改变指针,答案是 没有。你必须做你提到的原始到独特的舞蹈。
当然,即使你不能更改foo
的签名,你当然可以提供自己的功能来包裹那支舞。它甚至可能是 foo
:
的重载
std::unique_ptr<cls> foo()
{
cls *p = nullptr;
foo(&p);
return std::unique_ptr<cls>{p};
}
struct cls{
~cls(){std::cout<<"dtor\n";}
};
void foo(cls** pp){
*pp = new cls;
}
int main()
{
cls* raw_ptr = 0;
foo(&raw_ptr);
std::unique_ptr<cls> u_ptr{raw_ptr};
}
有没有办法直接访问unique_ptr
中的raw_pointer
传递给函数foo(cls** pp)
?
或
cls* raw_ptr = 0;
foo(&raw_ptr);
std::unique_ptr<cls> u_ptr{raw_ptr};
这是唯一的方法吗?
注意:我无法更改函数的签名 foo
。
unique_ptr<>::get() - 它 returns 指向拥有对象的指针,而不释放对象的所有权。
您可以只读 访问unique_ptr
中的指针,方法是使用unique_ptr::get()
。这returns 存储了指针的副本。
但是,我理解你的问题,关于是否有办法在 unique_ptr
原位; 中改变指针,答案是 没有。你必须做你提到的原始到独特的舞蹈。
当然,即使你不能更改foo
的签名,你当然可以提供自己的功能来包裹那支舞。它甚至可能是 foo
:
std::unique_ptr<cls> foo()
{
cls *p = nullptr;
foo(&p);
return std::unique_ptr<cls>{p};
}