我想知道在某个执行点分配的某些对象的确切实例数.主要是为了寻找可能的内存泄漏(我主要使用RAII,几乎没有新的,但在添加新元素或类似的东西之前,我仍然可以在向量上忘记.clear()).我可以有一个
atomic<int> cntMyObject;
Run Code Online (Sandbox Code Playgroud)
我 - 在析构函数中,++增加构造函数,cpy构造函数(我希望我涵盖了一切:)).但这对每个班级来说都是硬编码.在"释放"模式下禁用它并不简单.那么有没有简单优雅的方法可以轻松禁用来计算对象实例?
Cha*_*had 27
有一个"计数对象"类,在其构造函数和析构函数中执行正确的引用计数,然后派生您想要从中跟踪的对象.然后,您可以使用奇怪的重复模板模式为您想要跟踪的任何对象类型获取不同的计数.
// warning: pseudo code
template <class Obj>
class CountedObj
{
public:
CountedObj() {++total_;}
CountedObj(const CountedObj& obj) {if(this != &obj) ++total_;}
~CountedObj() {--total_;}
static size_t OustandingObjects() {return total_;}
private:
static size_t total_;
};
class MyClass : private CountedObj<MyClass>
{};
Run Code Online (Sandbox Code Playgroud)
你可以应用这种方法
#ifdef DEBUG
class ObjectCount {
static int count;
protected:
ObjectCount() {
count++;
}
public:
void static showCount() {
cout << count;
}
};
int ObjectCount::count = 0;
class Employee : public ObjectCount {
#else
class Employee {
#endif
public:
Employee(){}
Employee(const Employee & emp) {
}
};
Run Code Online (Sandbox Code Playgroud)
在DEBUG模式下,调用ObjectCount::showCount()方法将返回创建的对象的计数.