【发布时间】:2019-06-16 03:27:08
【问题描述】:
这段代码运行良好:
class Test
{
int* ptr = new int(10);
};
int main()
{
Test o;
Test t = o;
}
但是当我们使用 unique_ptr 而不是 raw ptr 时,我们得到一个错误:
error: use of deleted function 'Test::Test(const Test&)'
以及示例代码:
class Test
{
std::unique_ptr<int> ptr = std::make_unique<int>(1);
};
int main()
{
Test o;
Test t = o;
}
发生了什么事?
【问题讨论】:
-
当然
unique_ptr没有复制构造函数,只有移动构造函数。如果您想复制Test,请使用shared_ptr(或按照链接答案的建议进行深层复制)。 -
提示在名称中。如果每个人都能拥有一个指针,它就不是唯一的指针了。
-
其实原代码不是好的。它有内存泄漏,切换到
std::unique_ptr允许编译器防止这种情况(通过不允许您的代码)。
标签: c++