[問題] C++物件建構順序
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
g++
問題(Question):
我有兩個 class A、class B,想要在 B 的建構子裡丟東西給 A。
在宣告成全域變數的時候,有可能會因為 B 先建構好,再 A,導致 A 存的東西被清掉。
舉例來說:
B o1(123);
A master;
B o2(456);
這樣的話,進到 main 裡面後看到的 master 裡面只有 456。
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
https://www.ideone.com/nSYZD8
補充說明(Supplement):
我目前的解決辦法是用這個方式:
class A &master() {
static A _master;
return _master;
}
用 master() 代替 master。
不過這樣感覺怪怪的,不知道有沒有其他正常的方法?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.56.71
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1538496393.A.11E.html
推
10/03 00:17,
7年前
, 1F
10/03 00:17, 1F
推
10/03 00:23,
7年前
, 2F
10/03 00:23, 2F
→
10/03 00:23,
7年前
, 3F
10/03 00:23, 3F
→
10/03 00:23,
7年前
, 4F
10/03 00:23, 4F
推
10/03 00:26,
7年前
, 5F
10/03 00:26, 5F
→
10/03 00:26,
7年前
, 6F
10/03 00:26, 6F
→
10/03 01:43,
7年前
, 7F
10/03 01:43, 7F
推
10/03 09:19,
7年前
, 8F
10/03 09:19, 8F
→
10/03 09:19,
7年前
, 9F
10/03 09:19, 9F
→
10/03 09:20,
7年前
, 10F
10/03 09:20, 10F
推
10/03 11:19,
7年前
, 11F
10/03 11:19, 11F
→
10/03 11:45,
7年前
, 12F
10/03 11:45, 12F
→
10/03 11:45,
7年前
, 13F
10/03 11:45, 13F
→
10/03 12:05,
7年前
, 14F
10/03 12:05, 14F
→
10/03 12:05,
7年前
, 15F
10/03 12:05, 15F
→
10/03 12:05,
7年前
, 16F
10/03 12:05, 16F
我是有想過在 B 裡面用 static member variable,不過如果我想讓使用者可以用多種型
別,例如:
B<int32_t> o1(456);
B<float> o2(3.14159);
B<string> o3("abc");
的話,我在 A 裡面要處理的話就要先寫好(還是有別的方法?),要用的型別多的話看起來
也是怪怪的...。
如果是這樣:
B<list<int>> o4( ... );
這種要是事前沒寫到的話就...有點麻煩?
※ 編輯: Lipraxde (140.113.210.55), 10/03/2018 12:58:30
→
10/03 21:32,
7年前
, 17F
10/03 21:32, 17F
推
10/03 23:57,
7年前
, 18F
10/03 23:57, 18F
→
10/03 23:57,
7年前
, 19F
10/03 23:57, 19F
→
10/04 00:25,
7年前
, 20F
10/04 00:25, 20F
→
10/04 00:27,
7年前
, 21F
10/04 00:27, 21F
→
10/04 00:29,
7年前
, 22F
10/04 00:29, 22F
→
10/04 10:42,
7年前
, 23F
10/04 10:42, 23F
→
10/04 11:29,
7年前
, 24F
10/04 11:29, 24F
→
10/04 11:29,
7年前
, 25F
10/04 11:29, 25F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章