c++成员变量与构造函数
一、 如果成員變量是對象實體(不是指針)
例如StudyTool類中有一個Book類的成員變量,StudyTool的構造函數和析構函數均為空函數。
class StudyTool { public:Book book;StudyTool();virtual ~StudyTool();void printBook(); };那么在main()方法中執行如下代碼時
int main(void) {StudyTool tool;return 0; }執行順序為:1. 執行Book的默認構造函數,2. 執行StudyTool的默認構造函數, 3.執行StudyTool的析構函數, 4.?執行Book的析構函數。
注1:以上順序可以通過:設置一個全局變量,在StudyTool和Book的構造函數和析構函數中分別打印函數名和全局變量,來證明其執行順序。本人已編碼做過驗證。
可見,在執行StudyTool的構造函數之前,將會自動調用其成員變量book的構造函數,同時,當main()函數清理棧內存時,調用外層StudyTool的析構函數之后,會再自動調用成員變量book的析構函數。
二、如果成員變量是指針
仍用StudyTool和Book的例子,在StudyTool的構造函數中new一個Book,將其賦給指針book,StudyTool和Book的析構函數均為空函數。如下
class StudyTool { public:Book *book;StudyTool(){book = new Book();}virtual ~StudyTool(){}void printBook(); };則執行順序為:將1. 執行StudyTool的構造函數,2. 在StudyTool的構造函數中,通過new語句來執行Book的構造函數, 3.執行StudyTool的析構函數。
注2:以上順序本人也編碼做過驗證,驗證方式類同注1。
可見:當成員變量為指針時,外層類StudyTool不會自動對其初始化,也不會自動對其析構。需要在構造函數和析構函數中顯式地對其new和delete。
因此,上述StudyTool類的析構函數中應該加上 delete book 這句。
?
?
轉載于:https://www.cnblogs.com/james6176/archive/2012/11/28/2792947.html
總結
以上是生活随笔為你收集整理的c++成员变量与构造函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装虚拟光驱Daemon Tool 安装
- 下一篇: eclipse源服务器未能找到,ecli