[問題] C++物件建構順序

看板C_and_CPP (C/C++)作者時間7年前 (2018/10/03 00:06), 7年前編輯推噓6(6019)
留言25則, 8人參與, 7年前最新討論串1/1
編譯器(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
這寫法也太危險了吧lol
10/03 00:17, 1F

10/03 00:23, 7年前 , 2F
你還想要a是extern 這樣你要怎麼確保 construction ord
10/03 00:23, 2F

10/03 00:23, 7年前 , 3F
er? 一個做法是都傳同一個變數 也就是你的解法 為何奇
10/03 00:23, 3F

10/03 00:23, 7年前 , 4F
怪呢?
10/03 00:23, 4F

10/03 00:26, 7年前 , 5F
大多不應該依賴全域變數的建構順序 你大可以在你的main
10/03 00:26, 5F

10/03 00:26, 7年前 , 6F
安排好順序
10/03 00:26, 6F

10/03 01:43, 7年前 , 7F
我是看llvm command line library蠻潮的,想模仿看看
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
一定要在B建構裡面才能塞給A嗎
10/03 11:45, 12F

10/03 11:45, 7年前 , 13F
不能建好B之後 從B裡面丟出A所需要的東西嗎
10/03 11:45, 13F

10/03 12:05, 7年前 , 14F
如果不在 B 的建構子裡面丟給 A 的話,是不是就要使用
10/03 12:05, 14F

10/03 12:05, 7年前 , 15F
者主動丟才行?
10/03 12:05, 15F

10/03 12:05, 7年前 , 16F
我有辦法知道使用者用 B 宣告了那些參數嗎
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
可以貼一下 llvm 是怎麼用的嗎?
10/03 21:32, 17F

10/03 23:57, 7年前 , 18F
不要把A master插在兩個B中間就好了
10/03 23:57, 18F

10/03 23:57, 7年前 , 19F
用master()是標準的Singleton Pattern沒甚麼不好
10/03 23:57, 19F

10/04 00:25, 7年前 , 20F

10/04 00:27, 7年前 , 21F
如果 master 是定義在另一個檔案裡...
10/04 00:27, 21F

10/04 00:29, 7年前 , 22F
Singleton Pattern 沒什麼不好的話就這樣吧
10/04 00:29, 22F

10/04 10:42, 7年前 , 23F
讓A去讀B的public變數不就好了?
10/04 10:42, 23F

10/04 11:29, 7年前 , 24F
我會先吧 A 的部分會先編譯成 lib,B 用來給使用者宣告
10/04 11:29, 24F

10/04 11:29, 7年前 , 25F
變數
10/04 11:29, 25F
文章代碼(AID): #1RivU94U (C_and_CPP)
文章代碼(AID): #1RivU94U (C_and_CPP)