簡體   English   中英

在cpp中創建嵌套對象。 下面的偽代碼中的函數調用順序是什么?

[英]Nested object creation in cpp. What is the function call sequence in pseudo code below?

這是一些代碼,我不理解某些概念。 請幫忙!

現在在下面的代碼中,當我創建some_obj1並嘗試訪問some_obj2中的表時,是否可以訪問internal_table? 它創建了嗎?

我感覺不會,因為我在some_obj1的默認構造函數中什么也不做,也沒有在some_obj2的默認構造函數中創建它。

class some_obj1 {
 public: // Updated
    some_obj2 table; // table is a vector of int pointers.

    some_obj1() {
        //DO Nothing
    }
}

class some_obj2 {
 public: // Updated
    std::vector<int *> internal_table;

    some_obj2(){
        internal_table.push(new int[10]);
    }
}

main () {
    some_obj1 make_a_object;
    //Use the object created for some task.
    // Access the internal_table in some_obj2. Will I be able to access it? is it created?

}

在構造函數的開頭,所有成員均已構造-默認構造(如果具有默認構造函數)或未初始化(如果它們屬於Plain-Old-Data(POD)類別),例如int或指針。

請注意,如果您未聲明默認的構造函數,則將自動獲得類和結構的默認構造函數。 將使用其默認構造函數正確構造您的類類型成員。

如果您不想默認構造某些東西(或者您不能,因為它可能沒有默認構造函數),則應在初始化器列表中對其進行初始化。

您具有此處使用的簡單組成規則。

您要做的第一件事是:

some_obj1 make_a_object;

事物創建的順序:

std::vector<int *> internal_table; //because some_obj2 will needs it
some_obj2 table; //because some_obj1 needs it
some_obj1 make_a_object; //is now finally ready

易於檢測是否使用調試器。 3行只是描述了對象在創建時的完成順序,它沒有顯示執行順序,因為當然some_obj1 make_a_object首先執行。 關鍵是該代碼首先觸發其他事物的創建,當此事物完成時,對some_obj1 make_a_object的調用將完成。

這段代碼也值得懷疑:

internal_table.push_back(new int[10]);

我認為只有一個元素,數組中的第一個元素將被推到向量上。

是的,您可以做您打算做的事,但您需要修復語法和其他問題,例如

1)不為構造函數聲明訪問說明符將導致將其聲明為private ,這將不允許創建其對象,該對象是單例設計模式的基礎。

2)沒有稱為push方法,STL中為向量提供了push_back

3)類定義應以;結尾;

4)您將收到一個錯誤,指出沒有類型some_obj2可以解決此問題,您應該執行前向聲明或遵循序列。

#include <iostream>
#include <vector>

using namespace std;

class some_obj2 {
   std::vector<int *> internal_table;

   public:
   some_obj2(){
      internal_table.push_back(new int[10]);
   }
};


class some_obj1 {
   some_obj2 table; // table is a vector of int pointers.

   public:
   some_obj1() {
      //DO Nothing
   }
};
int main () {
    some_obj1 make_a_object;
    //Use the object created for some task.
    // Access the internal_table in some_obj2. Will I be able to access it? is it created?
return 0;
}

暫無
暫無

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

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