构造函数和析构函数调用

时间:2010-09-27 12:42:58

标签: c++

如何检查我的构造函数或析构函数是否被调用过?

由于隐式调用,我不知道它们是否实际被调用。

6 个答案:

答案 0 :(得分:9)

  • 在IDE中的c'tor中设置断点
  • 将一些调试输出写入控制台/文件/您想要的
  • 阅读一本书,了解标准在被召唤时所说的内容。

答案 1 :(得分:6)

你为什么不加入几个cout<<在我的ctor / dtor中“我在这里”或使用调试器并在那里设置断点?

答案 2 :(得分:1)

如果您想避免或更好地管理隐式调用,您可以将构造函数限定为explicit。这将显示您在编译时可能缺少的任何隐式调用。

一旦您整理了这种用法,您可以删除资格或者根据自己的喜好离开。

如果要跟踪ctor与dtor调用的计数,可以为类中的每个调用添加一个静态计数器,然后使用互锁递增和递减操作分别计算ctors和dtors。这应该表明您是否正确匹配它们。你必须包括copy ctor和你在课堂上实现的任何非默认ctors才能工作。

答案 3 :(得分:0)

  1. 在调试器中运行应用程序并在构造函数或析构函数中放置断点。如果调试器在该断点处停止,则构造函数或析构函数会被命中。
  2. 输入printf语句,说“class foo constructor hit”,或“class foo析构函数被击中”。然后,当您的应用程序运行时,您可以查看标准输出(输出到控制台窗口)并查看应用程序发生了什么。这通常称为跟踪。它有时非常有用。

答案 4 :(得分:0)

您可以为它们设置断点并查看它是否被击中。或者您可以输出一行到控制台:

class MyClass {
  MyClass()  { std::cout << "In constructor" << std::endl; }
  ~MyClass() { std::cout << "In destructor" << std::endl; }
};

答案 5 :(得分:0)

其中一种可能的方法是为每个构造函数和析构函数添加带有特殊消息的正确标记的“std :: cout”。