C++11提供了智能指针unique_ptr,当离开作用域范围就会自动释放,但是有时我们希望可以主动释放unique_ptr指向的内存空间,如何做到呢?直接把nullptr赋值给智能指针就行了。
例子
下面是个简单的例子,
#include <iostream>
#include <memory>
class Test
{
public:
Test() {}
// 析构函数
~Test()
{
std::cout << "123\n";
}
};
int main(int, char**)
{
std::cout << "==>1\n";
{ // 作用域开始
std::unique_ptr<Test> ptr(new Test);
std::cout << "==>2\n";
} // 作用域结束
std::cout << "==>3\n";
return 0;
}
main函数里使用花括号设置了一个作用域,当离开作用域,就会释放智能指针指向的内存空间,也就会调用Test的析构函数。
编译运行后打印如下,
“123”是在“==>2”和 “==>3”之间打印的。
修改代码,让智能指针主动释放,如下,
int main(int, char**)
{
std::cout << "==>1\n";
{ // 作用域开始
std::unique_ptr<Test> ptr(new Test);
ptr = nullptr; // 主动释放
std::cout << "==>2\n";
} // 作用域结束
std::cout << "==>3\n";
return 0;
}
最后打印如下,
可以看到是在打印“==>2”之前就释放了。