std::shared_ptr如何手动调用析构函数,举个例子
时间: 2023-11-09 20:09:57 浏览: 74
c++ 析构函数例子
std::shared_ptr是一个智能指针,它会自动管理其指向对象的内存资源,包括在不需要时自动调用析构函数释放内存。
但是,有时候我们可能需要手动调用析构函数,比如我们需要在某个时刻特殊处理一些资源,或者在测试时需要手动释放资源等。这时候可以使用reset()函数来手动调用析构函数。
举个例子,假设我们有一个自定义的类MyClass,它有一个析构函数和一个成员函数DoSomething(),我们可以这样使用std::shared_ptr:
```
#include <memory>
#include <iostream>
class MyClass {
public:
~MyClass() {
std::cout << "MyClass destructor called" << std::endl;
}
void DoSomething() {
std::cout << "MyClass::DoSomething()" << std::endl;
}
};
int main() {
std::shared_ptr<MyClass> ptr(new MyClass());
ptr->DoSomething();
ptr.reset(new MyClass()); //手动调用析构函数
return 0;
}
```
在上面的代码中,我们首先创建了一个std::shared_ptr对象ptr,它指向一个MyClass对象。然后我们调用了MyClass的成员函数DoSomething(),最后我们手动调用reset()函数来重置std::shared_ptr指针,并且在这个过程中会自动调用MyClass的析构函数。
输出结果:
```
MyClass::DoSomething()
MyClass destructor called
```
可以看到,reset()函数的调用会自动调用MyClass的析构函数,释放内存资源。
阅读全文