有没有办法知道我的对象是活着的,除了在类中声明静态私有成员,并在构造函数中增加它,在析构函数中递减它。提前致谢。如何知道我的对象是否存在于C++中?
回答
您还可以通过使用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"
如果有问题的代码存在一个非静态方法里面,那么你的目标是通过定义“活着” - 只要你不标新立异像一个方法中删除。
如果你是这样做(不推荐,除非你真的知道自己在做什么),然后确保你NULL
出指针随即并始终确保比较this
对NULL
,检查是否你的对象是“活着的”。
如果有人删除它,不回答如何检查对象是否处于活动状态。 –
如果您无法修改原始类,您自己的答案也是不完整的,但是我没有降低它的效果,因为它对于特定情况仍然有用。 – Spire
我相信他可以指定原始类别,否则这个问题就没有意义了。 –
- 1. 如何知道目标c中是否存在对象用ARC
- 2. 如何知道关系中的对象是否存在于数据库中
- 3. c#:如何知道'用户帐户'是否存在于Windows?
- 4. 。我怎么知道对象内是否存在字段?
- 5. 我如何知道Sound对象是否正在播放?
- 6. 如何知道数据是否存在于url中不是
- 7. 如何知道“.target2”是否应用于jQuery对象?
- 8. 如何知道对象在AS3中是否动态
- 9. 在Python中,如何知道对象是否可以比较?
- 10. 我如何知道对象是否可以被弱引用?
- 11. 如何知道json对象是否包含json对象
- 12. 如何知道是否存在NSUserDefault?
- 13. 如何知道是否正在对angular2
- 14. 通知中心 - 如何知道是否存在“未读”通知?
- 15. 如何知道GWT和IE8中的RPC对象是否“太大”?
- 16. 如何知道我是否在回传?
- 17. 如何在不知道其父对象是否存在的情况下保存对象?
- 18. 我怎么知道一个对象是否是唯一的
- 19. 我怎么能检查对象是否存在于C++
- 20. Laravel - 如何知道属性是否存在于相关表
- 21. 如何知道我的图像是否存在于服务器上? (PHP)
- 22. C#对象是否知道更具体的类的类型?
- 23. C#WebClient.OpenRead如何知道eof是否?
- 24. 我想知道一个对象是否在我的教条集合中
- 25. 我如何知道推送通知是否在iOS中传递?
- 26. 我如何知道连接是否与websockets一起存在?
- 27. 我如何知道HTML属性是否存在,使用Javascript
- 28. 我如何知道我是否在道路两点之间android
- 29. 我想知道在C++中是否有任何IOC库?
- 30. 我如何知道Rabbitmq是否成功?
你是什么意思“活着?”我认为对此的回答是这样的,“呼叫者知道是否因呼叫者正在控制它而活着”。你怎么能*不知道它是否“活着”?你对此有何问题? – tenfour
如果您的对象已被破坏,则该对象的任何方法都不应运行。如果在销毁之后调用方法,那么在程序中某个地方会出现错误* else *。你的对象是活着的,或者它不存在。 –
太糟糕了“不”没有足够的字符是一个正确的答案。 –