当前位置: 代码迷 >> 综合 >> 【自己动手】实现简单的C++ smart pointer
  详细解决方案

【自己动手】实现简单的C++ smart pointer

热度:42   发布时间:2024-01-03 22:43:45.0

Why Smart Pointer?

为什么需要智能指针?因为c++的内存管理一直是个令人头疼的问题。

假如我们有如下person对象:每个person有自己的名字,并且可以告诉大家他叫什么名字:

//
//a person who can tell us his/her name.
//
#include<iostream>
#include<string>
using namespace std;
class person{
public:person(string);void tell();~person();
private:string name;	  
};person::person(string name):name(name){}void person::tell(){cout << "Hi! I am " << name << endl;
}person::~person(){cout << "Bye!" << endl;
}
很多时候,我们并不知道自己要创建多少个对象,因此需要在程序运行中动态地创建和销毁对象- -这时我们会使用new操作符在堆(heap)中为创建的对象分配内存,使用delete释放分配的内存。一个简单的示例:

#include "person.h"
int main(){person *p = new person("Cici");p -> tell();delete p;
}
程序的执行结果:

简单的程序我们当然不会忘记释放堆中分配的对象。但是当程序复杂时,成千上万对象被动态的创建,而在不使用这些对象时,都需要及时的释放,否则就会造成内存泄露(memory leak)。内存泄露是c++程序中最常见的问题之一,因为c++本身并没有提供自动堆内存管理的功能,所以,所有这些任务都交给了程序员自己--程序员必须对自己动态创建的堆对象负责&#

  相关解决方案