将变量传递给一个函数,该函数将智能指针作为参数,而该变量本身不是智能指针。

时间:2016-12-19 22:01:28

标签: c++

好的,那么看看如何将变量的地址传递给需要像这样的指针的函数:

void func(int* x)
{
   //some code
}
int y = 9;

func(&y);

如果函数如下所示,是否可以执行类似于上面的操作:

 void func(std::unique_ptr x)
 {
     //some code
 }

如果我因为某种原因不想让你成为unique_ptr,我该如何传递呢?

3 个答案:

答案 0 :(得分:2)

如果函数采用std::unique_ptr<int>参数,那么它期望获得变量的所有权。当然,您不应该将自动变量的地址传递给它。您必须创建值的副本,如下所示:

func(std::make_unique<int>(y));

答案 1 :(得分:1)

你做不到。它与unique_ptr没有任何关系。函数采用某些类型的参数列表。这是该函数将接受的唯一参数。这就是C ++的工作方式。

您的选择是:

  1. 将参数转换为函数所需的类型。如果是unique_ptr,则无法选择。

  2. 编写一个带有不同参数的函数的重载版本。

  3. 将函数写为模板函数。

答案 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
}