【发布时间】:2016-09-19 03:19:01
【问题描述】:
假设我有这门课:
class Foo
{
public:
Foo()
{
bar = new Bar;
}
~Foo()
{
if(bar)
delete bar;
}
private:
Bar* bar;
};
当unique_ptr 臃肿时,为什么我要使用std::unique_ptr 而不是原始指针?有什么优势吗?有没有我的析构函数不会被调用的情况?
【问题讨论】:
-
std::unique_ptr肿到什么程度了?它是一个非常薄的原始指针包装器。 -
因为你会忘记。也许不是现在,而是以后。你会改变一些东西而忘记改变其他东西。现在你有内存泄漏。或者你会双倍释放它。此外,它不是“臃肿”
-
为了证明这一点,看看这个构造函数和 getter 函数花了我多少钱here。请注意,编译器只是加载值并打印它,完全优化了对我的类的任何引用。这忽略了这样一个事实,即复制 8 个字节的构造函数调用在几乎所有情况下都完全可以忽略不计。
-
您的朋友正在过早地优化,因此他们的代码将变得一团糟。编写干净的代码,使用语言来帮助您正确编写代码。
-
在我的测试中,unique pointer 与 raw pointer 一样快,并且在检查生成的汇编语言时,编译器生成了相同的代码取消引用一个唯一指针和一个原始指针。优化器在取消引用时完全删除了
std::unique_ptr。
标签: c++ pointers destructor unique-ptr