gpt4 book ai didi

c++ - 使用 Cloaking 模式时需要虚拟析构函数吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:57:19 24 4
gpt4 key购买 nike

如果我有以下3个类来隐藏数据类型和存储信息,我需要一个虚拟析构函数吗?我被引导相信不,但现在我不确定。出于性能原因,我宁愿不包括它。为了举例,类(class)被精简了。

#include <memory>

class DarkHideInterface
{
public:
bool test;

};


template <typename T>
class DarkHideInterfaceImpl : public DarkHideInterface
{
public:
DarkHideInterfaceImpl (const T& t ) : _t(t) {}

private:
T _t;
};


class DarkHide
{
public:
template <class T> DarkHide (const T& t) : p_(new DarkHideInterfaceImpl<T>(t) ) { }

private:
std::auto_ptr<DarkHideInterface> p_;
};

最佳答案

对于 auto_ptr,我认为您需要虚拟析构函数,因为 delete 将以多态方式发生 - 换句话说,内部 auto_ptr 最终将在存储的 DarkHideInterface* 上调用 delete。如果 DarkHideInterface 没有虚拟析构函数并且指针指向 DarkHideInterfaceImpl 实例,那么您会得到未定义的行为。

请注意,据我所知,您不需要带有 shared_ptr 的虚拟析构函数,因为它会记住构造它的指针类型并调用 delete 直接在该指针上(在此处搜索“虚拟析构函数”以了解我的意思:http://www.boost.org/doc/libs/1_47_0/libs/smart_ptr/shared_ptr.htm)。

关于c++ - 使用 Cloaking 模式时需要虚拟析构函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7924217/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com