扩展类时内存泄漏

用户名

我有一个使用RAII精神创建的实现Trie的类,并且有一种使用它泄漏内存的方法,我不明白为什么。

班级代码:

 template <typename T,typename C,int Base>
    struct TrieNode
    {
     TrieNode* childs[Base];
     T n;

     unsigned int val;

     void init(unsigned int val);
     {
      Created++;

      this->val = val;
      memset(childs, 0 ,sizeof(TrieNode*) * Base);
      n = create_empty<T>();
     }

     TrieNode(int mult)
     {
      init(mult);
     }

     ~TrieNode()
     {
      Deleted++;

      for(int i=0;i<Base;i++)
       delete childs[i];
     }


     T& create(unsigned int number,int mult);
     C get_keys(int val);
     TrieNode& move(TrieNode& other);


     public :

      TrieNode(){ init(1); }
      TrieNode (const TrieNode& other)
      {
       move( const_cast<TrieNode&>(other) );
      }

      TrieNode& operator= (TrieNode other)
      {
       return move(other);
      }

      T& operator[](unsigned int number)
      {
       return this->create(number,1);
      }

      bool is_empty();
      C get_keys();
    };

现在,如果我这样做:

template<typename T,typename C>
struct TrieNodeTen 
{
    typedef TrieNode<T,C,10> type;
};

template <typename T>
struct TrieNodeTenVec
{
    typedef typename TrieNodeTen<T,std::vector<int>>::type type;
};


TrieNodeTenVec< TrieNodeTenVec<bool>::type >::type trie;

我没有泄漏,但是如果我这样做:

template <typename T,typename C>
class TrieNodeTen1 : public TrieNode<T,C,10> {};

template <typename T>
class TrieNodeTenVec1 : public TrieNodeTen1<T,std::vector<int> > {};

TrieNodeTenVec1< TrieNodeTenVec1<bool> > trie;

我有些漏气。(泄漏的原因不是赋值运算符或构造函数,因为我在代码上使用了“ assert(0)”并且没有被调用。我删除了断言以在线使用gcc进行编译。

我正在使用Visual Studio,但是当我使用http://www.compileonline.com/compile_cpp_online.php在线编译时,我正在发生同样的事情

完整代码:

http://pastebin.com/qrd7pzMN(泄漏)http://pastebin.com/krVFBzmA

之所以尝试两种方式,是因为我正在尝试使用C ++进行一些实验,并且虽然我理解非泄漏方式在编译后会减少膨胀,但我不喜欢使用它的语法。

Yochai Timmer

您需要有一个虚拟的析构函数。

如果不是虚拟的,则不会正确调用基类(或派生的)类析构函数。

析构函数将是隐藏的,如果不是虚拟的,则不会被覆盖。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

扩展类时发生内存泄漏

来自分类Dev

继承的类内存泄漏

来自分类Dev

使用AutomationElement类时可能发生内存泄漏

来自分类Dev

注入类而不是实例时发生内存泄漏?

来自分类Dev

Delphi:在类内创建TStringList时发生内存泄漏

来自分类Dev

使用类的向量时是否会遇到内存泄漏?(C ++)

来自分类Dev

GNU Parallel扩展的内存泄漏

来自分类Dev

Android 内存泄漏 - 匿名类

来自分类Dev

使用PyArray_SimpleNewFromData()创建数组并返回时,Python扩展中的内存泄漏

来自分类Dev

在 PHP7 扩展中创建循环对象时出现内存泄漏

来自分类Dev

C ++:内存泄漏;类矢量类

来自分类Dev

PHP扩展中的malloc导致内存泄漏

来自分类Dev

Python 的 C 扩展中的内存泄漏

来自分类Dev

Mac-每个扩展内存扩展,又名哪个扩展泄漏?

来自分类Dev

在类中使用常量引用常量时C ++ O2内存泄漏

来自分类Dev

类方法中的alloc导致内存泄漏?

来自分类Dev

C ++类构造方法中的内存泄漏

来自分类Dev

自己类中的C ++ GDI +内存泄漏

来自分类Dev

链接节点类中的内存泄漏

来自分类Dev

创建类变量期间发生内存泄漏

来自分类Dev

Tomcat的上HttpURLConnection类的内存泄漏警告

来自分类Dev

我的ByteToMessageDecoder类中的内存泄漏

来自分类Dev

链接节点类中的内存泄漏

来自分类Dev

创建类变量期间发生内存泄漏

来自分类Dev

C ++类链接列表内存泄漏

来自分类Dev

当泄漏仪不显示内存泄漏时如何调试?

来自分类Dev

引发异常时避免内存泄漏的方法

来自分类Dev

检测退出时释放的C内存“泄漏”

来自分类Dev

使用NodeJS时发生内存泄漏