我正在尝试修改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;
}
我以为这行得通,除非遇到一个错误,抱怨构造函数已删除。有没有办法使这种模式有效?
答案 0 :(得分:0)
我假设您实际上正在使用std::make_unique<Foo>()
。
由于构造错误,这很可能是Foo
类型的问题,而不是您尝试使用的类型。不过,它也可能源自set_bar()
函数。
使用std::make_unique<Foo>()
将尝试使用默认构造函数(不带参数的构造函数)。您的Foo
类型似乎没有默认的构造函数。尽管没有手头的Foo
实现,但这只是一个猜测。您需要提供与Foo 1 的已定义构造函数之一相对应的std::make_unique<Foo>()
参数。
回复:您正在尝试做的事情-这似乎应该可行。尽管由于采用的是原始指针,但您应该考虑进行一些nullptr
检查。
1:如果定义了至少一个构造函数,其中一个不是默认构造函数,则将删除默认构造函数。