【发布时间】:2015-04-14 15:22:30
【问题描述】:
#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 方法会导致未定义的行为。现在我知道,在这种情况下我应该使用标准指针。
【问题讨论】:
-
olt是什么,有什么错误? -
你为什么要这样做?智能指针用于管理对象的生命周期,而您首先不拥有
object。 -
你是。仅使用智能指针替代“拥有”原始指针
-
当智能指针试图删除指针时,使用答案中描述的方法将导致undefined behavior。听 Baum 说,新的智能指针更多是为了所有权,而不是替换原始指针。
-
@user3125731 是的,你错了。使用智能指针来管理对象的生命周期,即如果您通过所述指针拥有对象。如果您只想使用其生命周期在其他地方管理的现有对象,则可以使用普通指针或引用。
标签: c++ smart-pointers c++14 unique-ptr