C++ 动态内存
- 动态分配的对象的生存期与它们在哪里创建的无关,只有当显式地释放时,这些对象才会被销毁。
使用动态内存的一个常见原因是为了让多个对象共享(不是拷贝)内部的数据,并使得当一个对象销毁时,该数据不会被销毁,其它对象仍然可以正常使用。
shared_ptr只在拷贝和赋值时其内部的引用计数器才会加1。所以不要用shared_ptr的get()初始化另一个智能指针
shared_ptr<int> p(new int(30));
{
shared_ptr<int> q(p.get());//此时p、q指向同一块内存,但是p和q的引用计数都为1
//q.reset(p.get())与上述同理,这里reset的参数是一个内置指针,所以reset不属于拷贝或赋值
}//当代码块结束后,q被销毁,q指向的内存块被释放,这时p成了空悬指针且当p被销毁时,该内存块被二次delete
- 智能指针不支持指针算数运算。如果非要用到指针的算数运算时,可以使用智能指针的get()获取内置指针,再用该内置指针做运算。
- -