在C++内存管理中说了RAII机制,在栈变量声明的时候自动初始化,在栈变量超过作用域的时候,自动触发析构函数。
这种RAII思想的一个具体实现就有智能指针,它是一个内部类,通过模版类技术做到可以封装任意类型,通过参数可以传入一般指针的方式可以实现资源对象存放在堆内存中,通过运算符重载技术模拟指针操作。
下面是原始指针和智能指针的比较
void UseRawPointer()
{
// Using a raw pointer -- not recommended.
Song* pSong = new Song(L"Nothing on You", L"Bruno Mars");
// Use pSong...
// Don't forget to delete!
delete pSong;
}
void UseSmartPointer()
{
// Declare a smart pointer on stack and pass it the raw pointer.
unique_ptr<Song> song2(new Song(L"Nothing on You", L"Bruno Mars"));
// Use song2...
wstring s = song2->duration_;
//...
} // song2 is deleted automatically here.
复制代码
参考引用