1.RAII
在传统的C++中需要程序员记得用delete对自己用new申请的堆内存进行释放,对于C++而言最早在98版引入智能指针的概念,之后的C++11做了加强,让程序员不需要关心手动释放内存。解决这个问题的灵感之一来源于RAII。RAII-Resource Acquisition Is Initialization(资源获取就是初始化),利用的就是C++构造的对象最终会被销毁的原则。RAII的做法是使用一个对象,在其构造时获取对应的资源,在对象生命期内控制对资源的访问,使之始终保持有效,最后在对象析构的时候,释放构造时获取的资源。RAII在C++11中的内存回收设计上的应用的关键词就是栈对象和析构函数。
2.RAII思想体会
// -std=c++11
#include <iostream>
using namespace std;
class RAII
{
public:
RAII()
{
std::cout << "RAII Object Constructor" << endl;
m_pInt = new int;
}
~RAII()
{
std::cout << "RAII Object Destructor" << endl;
if(m_pInt!=nullptr)
{
delete m_pInt;
}
}
private:
int* m_pInt;
};
void test()
{
RAII raiiobj;
};
int main()
{
test();
}
3.吸取深拷贝和浅拷贝的精华
4.考虑引用计数
5.利用好写时复制技术