C++ 如何引用和修改std::unique#ptr';它在另一个函数中的基本值是多少?

C++ 如何引用和修改std::unique#ptr';它在另一个函数中的基本值是多少?,c++,unique-ptr,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; } void my_func(Foo*Foo){ foo->se

我试图修改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;
}
void my_func(Foo*Foo){
foo->set_bar(“a”);
} 
int main(){
auto-foo=std::MakeUnique();
my_func(foo.get());
库特酒吧;
}

我原以为这会奏效,但我遇到一个错误,抱怨构造函数被删除了。有什么方法可以让这个模式工作吗?

我假设您实际使用的是
std::make_unique()

由于这是一个构造错误,这很可能是
Foo
类型的问题,而不是您试图用它做什么。尽管如此,它也可能源于
set\u bar()
函数

使用
std::make_unique()
将尝试使用默认构造函数(没有参数的构造函数)。您的
Foo
类型似乎没有默认构造函数。虽然,如果手头没有
Foo
的实现,这只是一个猜测。您需要给出
std::make_unique()
参数,这些参数对应于Foo 1的一个已定义构造函数

Re:你想做的是什么?这似乎应该行得通。尽管它正在接受一个原始指针,但是您应该考虑做一些<代码> NulLPTR < /代码>检查。
1:如果至少定义了一个构造函数,其中一个不是默认构造函数,则会删除默认构造函数。

什么是
MakeUnique
?什么是
Foo
?请在里面贴封信?那是一个指针。管理人?这就是指针所指的。一旦我做了必要的更正并填空,我就看不到任何问题:。绝对需要。不相关的建议:如果您使
my\u func
看起来更像
void my\u func(const std::unique\u ptr&foo)
,则
foo的所有权仍然清晰。你最不想看到的就是一些傻瓜出现,扔下一个
deletefoo在那里的某个地方。