是否有可能重新定义析构函数?

时间:2014-03-13 22:44:09

标签: c++

我在"重新定义"时遇到了问题。析构函数。问题是我得到了一个我无法修改的结构定义。这是" leaf"一棵树目标是在返回指向剩余子树的指针时仅释放树的一部分。我的想法是使用引用计数。 这是给定的代码:

struct TLeaf {
   TLeaf* m_L;
   TLeaf* m_R;
   ~TLeaf(void) {
     delete m_L;
     delete m_R;
   }
}

至少有办法避免调用这个析构函数吗?其实任何想法都是可以接受的。 :D

非常感谢Stack Overflow的好人。 :)

2 个答案:

答案 0 :(得分:4)

您可以在删除节点之前nullptr输出值。 delete ptr ptr nullptr TLeaf* ltmp = node->m_L; TLeaf* rtmp = node->m_R; node->m_L = nullptr; node->m_R = nullptr; delete node; // now use ltmp and rtmp as you need 是安全且无效的

{{1}}

答案 1 :(得分:0)

由于您无法修改TLeaf,您可以做的是修改用户代码。

0)如果您正在使用堆分配,请尝试operator delete(p)而不是delete p

1)如果您正在使用堆栈分配,请避免直接使用类型TLeaf

char leaf[sizeof(TLeaf)];
new (leaf) TLeaf(...); // placement new