好的,那么看看如何将变量的地址传递给需要像这样的指针的函数:
void func(int* x)
{
//some code
}
int y = 9;
func(&y);
如果函数如下所示,是否可以执行类似于上面的操作:
void func(std::unique_ptr x)
{
//some code
}
如果我因为某种原因不想让你成为unique_ptr,我该如何传递呢?
答案 0 :(得分:2)
如果函数采用std::unique_ptr<int>
参数,那么它期望获得变量的所有权。当然,您不应该将自动变量的地址传递给它。您必须创建值的副本,如下所示:
func(std::make_unique<int>(y));
答案 1 :(得分:1)
你做不到。它与unique_ptr没有任何关系。函数采用某些类型的参数列表。这是该函数将接受的唯一参数。这就是C ++的工作方式。
您的选择是:
将参数转换为函数所需的类型。如果是unique_ptr
,则无法选择。
编写一个带有不同参数的函数的重载版本。
将函数写为模板函数。
答案 2 :(得分:0)
如果std::unique_ptr
有一个合适的构造函数,那么是的。但是你必须在这种情况下创建一个模板函数,或者至少指定你的对象的类型(在你的情况下是int
)
模板功能:
template<typename VarType>
void func(std::unique_ptr<VarType> x)
{
//some code
}
具体案例:
void func(std::unique_ptr<int> x)
{
//some code
}