我得到了一个我无法修改的结构。是否可以提供我的析构函数并使用它而不是给定的析构函数?或者可能定义我的结构,然后在需要时进行类型转换?继承也是一种选择,但是没有设法跳过父析构函数的调用。
//Given struct
struct TA {
~TA() {
delete m_L;
delete m_R;
}
TA* m_L;
TA* m_R;
};
//What i need
struct TB {
~TB() {
if (m_L) m_L->destroy();
if (m_R) m_R->destroy();
}
void destroy() {
if (!--nRefernece) delete this;
}
int nRefernece;
TB* m_L;
TB* m_R;
};
答案 0 :(得分:5)
没有。如果您不想调用父析构函数,请不要使用继承。
答案 1 :(得分:2)
这是一个肮脏的黑客,但它在你的情况下是有效的:
在从析构函数返回之前,您只需在派生类的析构函数中调用destroy()
并将变量m_L
和m_R
设置为零。 delete
被定义为在传递空指针时不执行任何操作,因此,您已经有效地停用了基类析构函数中的代码。
struct TB : TA {
~TB() {
if (m_L) ((TB*)m_L)->destroy();
if (m_R) ((TB*)m_R)->destroy();
m_L = m_R = 0;
}
void destroy() {
if (!--nReference) delete this;
}
int nReference;
};