2

如果我有以下 3 个类来隐藏数据类型和存储信息,我需要虚拟析构函数吗?我被引导相信不,但现在我不确定。如果可能,出于性能原因,我宁愿不包括它。例如清酒的课程被剥离。

#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_; 
};
4

1 回答 1

2

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

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

于 2011-10-28T01:38:30.747 回答