#include <memory>
class bar{};
void foo(bar &object){
std::unique_ptr<bar> pointer = &object;
}
我想将对象的地址分配给指针。上面的代码显然不会编译,因为赋值运算符的右侧需要是 std::unique_ptr。我已经试过了:
pointer = std::make_unique<bar>(object)
但是它在编译过程中会抛出很多错误。我该怎么做?
更新
正如答案中所说 - 使用 std::unique_ptr::reset
方法会导致未定义的行为。现在我知道,在这种情况下我应该使用标准指针。
最佳答案
void foo(bar &object){
std::unique_ptr<bar> pointer;
pointer.reset(&object);
}
但请注意,不建议这样做,您不应为传递给函数的引用创建 unique_ptr
。在函数结束时,当 pointer
被销毁时,它也会尝试销毁 object
,并且它在函数调用之外不可用,从而导致访问内存错误。
示例:这将编译,但会出现运行时错误。
struct bar{ int num;};
void foo(bar &object){
std::unique_ptr<bar> pointer;
pointer.reset(&object);
}
int main()
{
bar obj;
foo(obj);
obj.num; // obj is not a valid reference any more.
return 0;
}
另一方面,您可能要考虑使用 shared_ptr这可以帮助您做出决定:unique_ptr or shared_ptr? .
关于c++ - 如何将现有对象的地址分配给智能指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28502067/