2011-10-09 114 views
0

有没有办法知道我的对象是活着的,除了在类中声明静态私有成员,并在构造函数中增加它,在析构函数中递减它。提前致谢。如何知道我的对象是否存在于C++中?

+1

你是什么意思“活着?”我认为对此的回答是这样的,“呼叫者知道是否因呼叫者正在控制它而活着”。你怎么能*不知道它是否“活着”?你对此有何问题? – tenfour

+1

如果您的对象已被破坏,则该对象的任何方法都不应运行。如果在销毁之后调用方法,那么在程序中某个地方会出现错误* else *。你的对象是活着的,或者它不存在。 –

+0

太糟糕了“不”没有足够的字符是一个正确的答案。 –

回答

1

您还可以通过使用shared_ptr/weak_ptr的STL非侵入式地对您的类执行此操作。

stl::shared_ptr<YourClass> p = stl::make_shared(...); // holds a strong reference to your type 
stl::weak_ptr<YourClass> wp(p); 

cout << wp.use_count(); // "1" 

p.reset(); 

cout << wp.use_count(); // "0" 
0

你的意思是知道你是否至少有一个实例化的类实例?静态计数器几乎是最好的方法。这就是无论如何会做到这一点。 :)

+0

对不起,我应该说我无法以任何方式修改构造函数和析构函数。 – arai

-1

如果有问题的代码存在一个非静态方法里面,那么你的目标是通过定义“活着” - 只要你不标新立异像一个方法中删除。

如果你这样做(不推荐,除非你真的知道自己在做什么),然后确保你NULL出指针随即并始终确保比较thisNULL,检查是否你的对象是“活着的”。

+1

如果有人删除它,不回答如何检查对象是否处于活动状态。 –

+0

如果您无法修改原始类,您自己的答案也是不完整的,但是我没有降低它的效果,因为它对于特定情况仍然有用。 – Spire

+0

我相信他可以指定原始类别,否则这个问题就没有意义了。 –

相关问题