先来看一下背景:在C++98的语言机制中,对象在超出作用域的时候其析构函数会被自动调用。接着,Bjarne Stroustrup在TC++PL里面定义了RAII(Resource Acquisition is Initialization)范式(即:对象构造的时候其所需的资源便应该在构造函数中初始化,而对象析构的时候则释放这些资源)。RAII意味着我们应该用类来封装和管理资源,对于内存管理而言,Boost第一个实现了工业强度的智能指针,如今智能指针(shared_ptr和unique_ptr)已经是C++11的一部分,简单来说有了智能指针意味着你的C++代码基中几乎就不应该出现delete了。
对于C++98的内存管理,我们可以建立一个资源管理类,举个例子:
class A
{
public:
A(){}
};
void rsrlek()
{
A* a = new A();
//do something /*<-------------这里可能出现异常导致程序退出,即指针a还没delete就退出了,于是就会出现内存泄露现象*/
delete a;
}
现在运用资源管理类进行内存管理:
class A
{
public:
A(){}
};
class B
{
public:
B() :a(new A()){}
~B(){ delete a; }
private:
A* a;
};
void nonrsrlek()
{
B b;
//do something
//delete a; /*<----------这里不需要显式删除指针*/
} /*<------------------函数退出,对象b自动析构&#x