[问题] C++物件建构顺序

楼主: Lipraxde (Lipraxde)   2018-10-03 00:06:24
编译器(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。
不过这样感觉怪怪的,不知道有没有其他正常的方法?
作者: steve1012 (steve)   2018-10-03 00:17:00
这写法也太危险了吧lol你还想要a是extern 这样你要怎么确保 construction order? 一个做法是都传同一个变量 也就是你的解法 为何奇怪呢?大多不应该依赖全域变量的建构顺序 你大可以在你的main安排好顺序
楼主: Lipraxde (Lipraxde)   2018-10-03 01:43:00
我是看llvm command line library蛮潮的,想模仿看看
作者: jass970991 (半糖绿假面超人)   2018-10-03 09:19:00
没有人这样写程式的 我连建构子里面都不太想呼叫函数了尽量让建构子越单纯越好
作者: chchwy (mat)   2018-10-03 11:19:00
不要这样写
作者: MOONY135 (谈无欲)   2018-10-03 11:45:00
一定要在B建构里面才能塞给A吗不能建好B之后 从B里面丢出A所需要的东西吗
楼主: Lipraxde (Lipraxde)   2018-10-03 12:05:00
如果不在 B 的建构子里面丢给 A 的话,是不是就要使用者主动丢才行?我有办法知道使用者用 B 宣告了那些参数吗
作者: descent (“雄辩是银,沉默是金”)   2018-10-03 21:32:00
可以贴一下 llvm 是怎么用的吗?
作者: thefattiger (LT)   2018-10-03 23:57:00
不要把A master插在两个B中间就好了用master()是标准的Singleton Pattern没什么不好
楼主: Lipraxde (Lipraxde)   2018-10-04 00:25:00
https://llvm.org/docs/CommandLine.html如果 master 是定义在另一个档案里...Singleton Pattern 没什么不好的话就这样吧
作者: annies5 (念渝)   2018-10-04 10:42:00
让A去读B的public变量不就好了?
楼主: Lipraxde (Lipraxde)   2018-10-04 11:29:00
我会先吧 A 的部分会先编译成 lib,B 用来给使用者宣告变量

Links booklink

Contact Us: admin [ a t ] ucptt.com