假設我們有一個名爲memoryCounter
的類,它試圖捕獲MyClass
類造成的內存泄漏。等量的構造函數和析構函數調用確保沒有內存泄漏?
class memoryCounter
{
public:
static int MyClassCount;
};
int memoryCounter::MyClassCount = 0;
我們還假設我們把在構造和MyClass
析構函數以下行(以及任何其他的構造,它有,也假設我們不修改MyClassCount
其他地方的構造函數/析構函數外):
MyClass()
{
memoryCounter::MyClassCount++;
}
virtual ~MyClass()
{
memoryCounter::MyClassCount--;
}
現在,我們可以絕對肯定如果memoryCounter::MyClassCount
包含零,那麼我們分配這個內存遠遠被釋放,並沒有泄漏?或者當變量包含零時會出現這種情況,但是會分配我們沒有空閒的內存(請考慮'MyClass'是基類還是派生類的情況)?
如果您希望即使對於派生類也可以使此工作變爲虛擬。 – 2012-08-01 10:42:06
不需要虛擬析構函數。如果有人擔心通過指向'memoryCounter'的指針刪除,您可以私下繼承(或保護)並公開公開計數。 (不是說OP甚至建議'memoryCounter'應該通過繼承來使用 - 這不是通常的CRTP計數器。) – 2012-08-01 10:54:36