簡體   English   中英

構造函數和析構函數調用

[英]Constructor and destructor calls

如何檢查我的構造函數或析構函數是否被調用?

由於隱式調用,我不知道它們是否實際被調用。

  • 在IDE中的c'tor中設置斷點
  • 將一些調試輸出寫入控制台/文件/您想要的任何內容
  • 讀一本書,了解標准在被叫時所說的內容。

你為什么不在你的ctor / dtor中輸入幾個cout <<“我在這里”或使用調試器並在那里設置斷點?

如果要避免或更好地管理隱式調用,可以將構造函數限定為explicit 這將顯示您在編譯時可能缺少的任何隱式調用。

一旦您整理了這種用法,您可以刪除資格或者根據自己的喜好離開。

如果要跟蹤ctor與dtor調用的計數,可以為類中的每個調用添加一個靜態計數器,然后使用互鎖遞增和遞減操作分別計算ctors和dtors。 這應該表明您是否正確匹配它們。 你必須包括copy ctor和你在課堂上實現的任何非默認ctors才能使用它。

  1. 在調試器中運行應用程序並在構造函數或析構函數中放置斷點。 如果調試器在該斷點處停止,則構造函數或析構函數會被命中。
  2. 把printf語句放在“class foo constructor hit”或“class foo析構函數被擊中”之類的內容中。 然后,當您的應用程序運行時,您可以查看標准輸出(輸出到控制台窗口)並查看應用程序發生了什么。 這通常稱為跟蹤。 它有時非常有用。

您可以為它們設置斷點,看它是否被擊中。 或者您可以輸出一行到控制台:

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

其中一種可能的方法是為每個構造函數和析構函數添加帶有特殊消息的正確標記的“std :: cout”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM