我正在使用Xcode中的C ++项目,我的一个.cpp文件实例化了一些变量。应用程序中的另一个.cpp文件使用这些变量来实例化另一个对象,并且需要将它们实例化为不抛出空指针异常。到目前为止,我的解决方案只是拖放(XCode简单)第一个文件在构建阶段顺序中的第二个文件。它现在工作正常,但我觉得它不是最佳解决方案,如果我需要手动组织编译顺序以使应用程序正常运行,我的代码会出现根本性的错误。
我是不是应该在功能之外实例化,或者什么是黄金法则?感谢。
编辑:请求的示例。 问题在于观察者/事件系统。 在源文件中,我这样做:
Trigger* mainMenu_init = new Trigger(std::vector<Event*> {
// Event(s):
event_gameInit,
}, [](Event* e) {
// Action(s):
std::cout << "Hello World" << std::endl;
});
在触发器的构造函数中,要求Event添加为观察者:
for(Event* event : events)
event->addObserver(this);
但是,事件只是外部指针,所以如果它们没有初始化(它们在另一个源文件中),那么这个初始化将会失败。所以我发现如果我自己没有组织编译阶段,随机触发器将无法工作,而其他将依赖于它们是否在Event.cpp文件之前或之后构建。
答案 0 :(得分:2)
我假设您正在讨论全局变量(或静态变量)的非平凡初始化,例如(在文件的顶层):
MyObject *myPtrObject = new MyObject(42, "blah");
MyObject myOtherObject;
(&#34;平凡&#34;粗略地讲,当没有涉及构造函数且一切都只涉及常量时,初始化;所以如果你将指针初始化为零,那么在实际调用任何代码之前它将为零)
C ++中不同源文件之间的初始化顺序为 NOT GUARANTEED 。它恰好取决于Apple当前系统中文件的顺序,但可能会改变。
所以,是的,有根本性的错误。
对您的计划一无所知,当然很难提供更具体的设计建议。