Bin*_*hou 1 c++ virtual destructor protected unique-ptr
test.cpp,最小测试代码
#include <memory>
class Parent{ // A Interface That I can't modify! can't add 'friend' or modify 'protected'
protected:
virtual ~Parent(){};
public:
// other interfaces that no one is suitable for 'delete this'
};
class Derived : public Parent{ // My class
public:
virtual ~Derived(){}
};
class Deleter : public Parent // My deleter to use unique_ptr
{
public:
void operator()(Parent* ptr)
{
delete ptr; // Actually Wrong? cannot access ptr's protected & private member
}
};
int main(int argc, char* argv[])
{
Deleter deleter;
// use of std::unique_ptr<Parent> error because of delete, so define my deleter to handle delete event.
std::unique_ptr<Parent, Deleter>(dynamic_cast<Parent*>(new Derived()), deleter);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如上面的代码.
有一个带有受保护虚拟析构函数的只读接口类"Parent".
unique_ptr<Parent>或shared_ptr<Parent>将用于管理从Parent派生的类的对象.
但是unique_ptr<Parent>( new Derived())由于删除操作直接使用带有编译错误的结果.
限制不要编辑Parent类的定义.我尝试创建一个能够删除指向Parent的指针的删除器.
经过一些测试,我发现在Derived类的方法中,父对象的protected&private成员无法访问.
我很好奇是否有一些解决方案,unique_ptr<Parent>没有父类的修改定义就可以使用.
谢谢你的帮助.
您的类层次结构格式错误.基类的受保护的析构函数旨在防止您尝试执行的操作.
制作析构函数而非公开的原因通常是强制执行单例模式,或其他一些排除破坏的原因.多态基类对受保护的析构函数几乎没有理由.
| 归档时间: |
|
| 查看次数: |
151 次 |
| 最近记录: |