##c++主要内存问题及解决方法
1、缓冲区溢出
solution:使用vector
2、空悬指针/野指针
solution:shared_ptr/weak_ptr
3、重复释放
solution:scoped_ptr,只在对象析构时候释放一次
4、内存泄漏
solution:scoped_ptr,对象析构时候自动释放内存
5、不配对的new[]/delete
solution:把new[]替换为vector/scoped_array
6、内存碎片
solution:todo
##shared_ptr是否线程安全
shared_ptr计数操作是线程安全的,release 1.33.0后在大多数系统中采用无锁的原子操作实现;但对于对象本身的访问不是线程安全的。对于shared_ptr的线程安全问题,boost官方文档中作了详细说明, http://www.boost.org/doc/libs/1_65_1/libs/smart_ptr/doc/html/smart_ptr.html#shared_ptr
这里作了下总结:
- 多个线程可以同时读一个shared_ptr实例
- 不同的线程中可以对不同的shared_ptr实例进行“写操作”(包括operator=、reset、析构)
- 一个shared_ptr实例被不同的线程同时读写是不安全的
代码例子:
Reading a shared_ptr from two threads
Writing different shared_ptr instances from two threads
Reading and writing a shared_ptr from two threads
Reading and destroying a shared_ptr from two threads
Writing a shared_ptr from two threads