cpp*_*der 5 c++ pointers destructor structure
我有一个类,它有一个以指针作为其成员之一的结构。
struct group {
void *v1,
void *v2;
};
class A {
A (group& handle)
: m_handle(handle)
private :
group m_handle;
};
Run Code Online (Sandbox Code Playgroud)
类 A 中没有指针成员。当 A 中没有定义析构函数时,我没有看到任何问题(例如内存泄漏)。我了解到,当对象 A 超出范围时,将调用 A 的析构函数,如果存在是 A 中存在的成员类,然后调用它们的析构函数,依此类推。那么,上面的 m_handle 这样的成员结构会发生什么 - 它们是否有类似于析构函数的东西,以及当对象 A 超出范围时,结构组中的两个 void 指针如何被删除?
是的,如果 v1 和 v2 没有在程序的其他部分中释放,它们可能会泄漏。因此,在 A 的析构函数中,您可以删除 v1 和 v2 (如果合适的话),或者您可以只添加一个析构函数到组(在 C++ 中,结构与类完全相同,除了默认可见性之外 - 默认情况下,东西是公共的)而不是私有的)并在那里删除它们。当然,这取决于适当性(也许分配了其他东西并拥有 v1 和 v2)。