Fan*_*Fox 8 c++ pointers c++11
在以下示例中:
class Base {
protected:
~Base() {
cout << "B\n";
}
};
class Derived : public Base {
public:
virtual ~Derived(){
cout << "D\n";
}
};
int main() {
Base *myBase_raw = new Derived();
delete myBase_raw;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
你期望得到:
错误:'virtual Base :: ~Base()'在此上下文中受到保护delete myBase_raw;
这很好,是阻止人们删除对象的有用工具.这也是如此std::unique_ptr.但是当你将原始指针交换为a时std::shared_ptr,它会正确编译:
int main() {
std::shared_ptr<Base> myBaseS(new Derived());
}
Run Code Online (Sandbox Code Playgroud)
似乎运行删除对象并调用Base和Derived析构函数(实例).根据cppreference:
使用delete-expression或在构造期间提供给shared_ptr的自定义删除器来销毁对象.
由于我没有提供自定义删除器,因此应该调用delete.以上怎么可能?
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |