如何实例化全局智能指针变量



如何实例化

unique_ptr<int[]> sums;

int main(int argc, char** argv)
{
    int n = //get from args
    sums(new int[n]);
}

?它给了我以下编译时错误

错误 C2247:"std::d efault_delete<_Ty>::运算符 ()"不可访问 因为"std::unique_ptr>"使用 从"std::_Unique_ptr_base<_Ty,_Dx,true>"继承的"私有"

看起来您可能会对C++的构造函数调用语法感到困惑。

如果你说

unique_ptr<int[]> sums(new int[n]);

这将构造一个名为 sums 的新对象,使用指向 int 数组的指针调用构造函数。

如果你说

unique_ptr<int[]> sums;
sums(new int[n]);

它在第一行中使用 0 参数构造函数构造sums,然后在第二行尝试调用sums对象上的unique_ptr<int[]>::operator()(int*)(即函数调用运算符)。这不存在,这会导致错误。

正如 dauphiic 的回答所说,您正在寻找的函数称为 reset

sums.reset(new int[n]);

(您可能想知道为什么存在像函数调用运算符这样愚蠢的东西。它允许您创建一个对象,该对象可以像函数一样调用,但像值一样传递。

你试图调用sums,就好像它是一个函数,但事实并非如此。std::unique_ptr的内部结构使错误消息令人困惑/误导。

如果要初始化sums指向的内容,则应使用 reset 函数。

sums.reset(new int[n]);

相关内容

  • 没有找到相关文章

最新更新