我想找到目前在C ++中存活的类的对象。 请告诉我一个解决方案。 另外,如果我的逻辑错误,请更正!
提前致谢。
Sanjeev
答案 0 :(得分:7)
你的逻辑是正确的,除了一件事:不要把它变成一个全局变量;这是不整洁的,并且存在一些其他代码中的错误可能会修改它的危险。而是将它作为类的私有静态成员变量。
答案 1 :(得分:6)
将类中的静态变量保留为count。全局变量不是好的做法。
答案 2 :(得分:1)
看看奇怪的重复出现的模板模式,这对于这类事情很有用,wikipedia中的示例显示了如何将它用于对象计数器。
template <typename T>
struct counter
{
counter()
{
++objects_created;
++objects_alive;
}
virtual ~counter()
{
--objects_alive;
}
// if you are using multiple threads, these need to be protected
// with interlocked operations as appropriate per your compiler + platform
static int objects_created;
static int objects_alive;
};
template <typename T> int counter<T>::objects_created( 0 );
template <typename T> int counter<T>::objects_alive( 0 );
class X : counter<X>
{
// ...
};
class Y : counter<Y>
{
// ...
};
答案 3 :(得分:0)
在C ++中是不可能的。跟踪构造函数和析构函数并不能保证准确性:如何防止这样的内存复制:
memcpy(buf, &instance, sizeof(T));
T* anotherInstance = (T*)buf;