C++ shared_ptr用途简析

shared_ptr是C++中的智能指针,其原理是:1.引用计数;2.C++栈对象脱离作用域可以即时销毁。具体怎么用自己找文章吧。

它有一些特性:

1. 一个项目的指针要么全都用shared_ptr,要么全都不用,否则会极大增加心智负担。

2. 第一条很难满足,模块之间、线程之间的参数传递,无一不是raw pointer(多数是void*)。

3. 避免循环引用。

4. 第三条很难满足,窗口拥有一个按钮,按钮要给窗口发送消息,就构成了循环引用。

5. 你可以使用weak_ptr避免(能全部避免吗?)循环引用带来的问题,但是其复杂性已经超过手动释放。

6. 使用shared_ptr之后,你知道也必须知道内存会何时何地释放——仅仅比手动释放少写代码(还不算复杂的类型声明),丝毫不会减轻心智负担。

7. 以上仅限于智能指针不出问题的情况。如果出了问题,使用shared_ptr的负面效应远远大于手动释放的工作量。

综上,shared_ptr基本没用。

PS:有异常的情况用unique_ptr足够,当然更好的选择是不用C++。

PS2:异常处理应该用于这样的情况:你能预料到会发生什么错误,但是不知道错误会不会发生,并且你打算处理这个错误让程序继续运行的情形。包括文件不存在、突然断网、用户在可以理解范围内的错误操作等,不包括数组越界、使用空指针、错误不打算处理想让程序挂掉等。

你可能感兴趣的:(C++ shared_ptr用途简析)