kad*_*ina 3 c++ auto-ptr unique-ptr
我不完全理解的好处unique_ptr了auto_ptr,或者我还没有完全相信,为什么我们需要使用unique_ptr.
我看到以下差异.
1)unique_ptr支持数组,因此unique_ptr析构函数调用delete []数组,而auto_ptr析构函数只调用数组delete.
2)std::move()必须使用而不是直接复制unique_ptr.但是我们有什么优势std::move()?我将尝试解释如下.
auto_ptr <int> p1 (new int);
auto_ptr <int> p2 = p1; // Now p1 is NULL and p2 exists with value of p1
unique_ptr <int> p1 (new int);
unique_ptr <int> p2 = std::move(p1); // Now p1 is NULL and p2 exists with value of p1
Run Code Online (Sandbox Code Playgroud)
那么我们将获得的优势是什么?
3)我在互联网上阅读,unique_ptr可以在容器中使用.但如果我理解正确,这不是伟大的事情unique_ptr.容器函数语义已经改变,所以现在一天,复制没有在容器函数内部完成.但这是多么伟大的事情unique_ptr呢?现在容器功能已经改变了,为什么我们不能auto_ptr在容器中使用?
Jon*_*ely 11
unique_ptr强迫您明确转移所有权,因此在代码中可见且清晰.由于auto_ptr很容易获得所有权的静默转移,并且在阅读代码时,并不总是清楚所有权是否被转移,如果是,是否是代码作者的意图或是一个错误!当你看到unique_ptr使用std::move它时,显然意图转移所有权.
unique_ptr正确支持移动语义,因此它只允许从临时对象和移动对象(即rvalues)进行所有权转移.容器可以检测类型是否"移动意识"并采取适当的行动. auto_ptr我不知道移动语义,并将从左值或右值转移所有权,因此容器认为它是一个普通的可复制对象,但它不像一个行为,因为它在复制时修改了它的来源.
auto_ptr小心使用时很有用,但是很容易误用它并编写危险的代码.是时候死了.unique_ptr支持一切都auto_ptr可以,但默认是安全的(你必须更加努力地使用它)并且还有自定义删除和数组支持等额外功能.
| 归档时间: |
|
| 查看次数: |
1143 次 |
| 最近记录: |