如何在另一个函数中引用和修改std :: unique_ptr的基础值?

时间:2018-11-29 01:29:38

标签: c++ unique-ptr

我正在尝试修改unique_ptr中的值,但在另一个实际上并不拥有unique_ptr的函数中,如下所示:

void my_func(Foo* foo) {
  foo->set_bar("a");
} 

int main() {
  auto foo = std::MakeUnique<Foo>();

  my_func(foo.get());

  cout << foo->bar;
}

我以为这行得通,除非遇到一个错误,抱怨构造函数已删除。有没有办法使这种模式有效?

1 个答案:

答案 0 :(得分:0)

我假设您实际上正在使用std::make_unique<Foo>()

由于构造错误,这很可能是Foo类型的问题,而不是您尝试使用的类型。不过,它也可能源自set_bar()函数。

使用std::make_unique<Foo>()将尝试使用默认构造函数(不带参数的构造函数)。您的Foo类型似乎没有默认的构造函数。尽管没有手头的Foo实现,但这只是一个猜测。您需要提供与Foo 1 的已定义构造函数之一相对应的std::make_unique<Foo>()参数。

回复:您正在尝试做的事情-这似乎应该可行。尽管由于采用的是原始指针,但您应该考虑进行一些nullptr检查。

1:如果定义了至少一个构造函数,其中一个不是默认构造函数,则将删除默认构造函数