Mor*_*eu5 1 c++ destructor shared-ptr c++11
说我喜欢上课
class A {
public: // I know, I know...
shared_ptr<string> aString;
};
Run Code Online (Sandbox Code Playgroud)
我必须要像这样的析构函数
~A() {
aString.reset();
}
Run Code Online (Sandbox Code Playgroud)
确保所有权得到妥善保释?我做了一些测试,似乎我没有 - 也就是说,当A的实例超出范围或被删除(或重置,如果我通过shared_ptr引用它)时,字符串也会被删除(我用一个更复杂的例子来证实这一点).但是,这可能是我正在使用的编译器特有的实现(clang-700.0.72).
我的问题是:总是如此,或者明确重置那些实例更好,就像删除任何其他哑指针一样?
不,这是智能指针的重点:自动管理内存。
的析构函数shared_ptr将自动减少引用计数,如果达到0,则将调用删除程序。
如果不提供析构函数,则将生成默认的析构函数:
§12.4.4如果一个类没有用户声明的析构函数,则将析构函数隐式声明为默认变量
班级的破坏将保证成员的破坏。
第12.4.8节执行析构函数的主体并销毁主体中分配的所有自动对象后,类X的析构函数调用X的直接非变量非静态数据成员的析构函数(...)
反过来shared_ptr意味着:
第20.8.2.2.2.1条
~shared_ptr();效果:
如果* this为空或与另一个shared_ptr实例共享所有权(use_count()> 1),则没有副作用。
否则,如果*这拥有一个对象p和一个删除器d,则调用d(p)。
否则,* this拥有一个指针p,并调用delete p。
这种行为很好地概括为“零规则”。
| 归档时间: |
|
| 查看次数: |
653 次 |
| 最近记录: |