如果我必须组织编译资源,那是不好的做法吗?

Is it bad practice if I have to organise Compile Sources

本文关键字:资源 编译 如果      更新时间:2023-10-16

我正在XCode中的C 项目工作,而我的.cpp文件之一实例化了一些变量。应用程序中的另一个.cpp文件使用这些变量实例化另一个对象,并需要对其进行实例化以不引发null-pointer异常。到目前为止,我的解决方案只是将第一个文件(Xcode Simplicity)拖放到构建相顺序中的第二个文件上。现在可以正常工作,但是我觉得它不是最佳解决方案,如果我需要手动组织编译订单以使应用程序正确运行,则我的代码从根本上有问题。

我应该永远不要实例化功能之外的东西,还是黄金法则是什么?谢谢。

编辑:按要求的示例。问题在于观察者/事件系统。在源文件中,我这样做:

Trigger* mainMenu_init = new Trigger(std::vector<Event*> {
    // Event(s):
    event_gameInit,
}, [](Event* e) {
    // Action(s):
    std::cout << "Hello World" << std::endl;
});

在触发器的构造函数中,要求事件添加为观察者:

for(Event* event : events)
        event->addObserver(this);

但是,这些事件只是外部指针,因此,如果它们不是初始化的(它们在另一个源文件中),则初始化将失败。因此,我发现,如果我自己不组织汇编阶段,随机触发器将无法正常工作,而其他触发器则取决于事件之前或之后的构建。CPP文件。

我假设您正在谈论全局变量(或静态变量)的非平凡初始化,例如(在文件的最高级别):

MyObject *myPtrObject = new MyObject(42, "blah");
MyObject myOtherObject;

(大概是在没有涉及构造函数的情况下,并且一切都涉及常数;因此,如果您将指针定为零,则在调用任何代码之前将为零)

不同源文件之间的初始化顺序是在C 中不保证。它恰好取决于Apple当前系统的文件顺序,但是可能会更改

是的,从根本上有问题。

黄金规则

  • 重要:在全局对象的初始化时,请勿使用来自不同源文件的任何其他全局对象。
  • 不要过度使用全局变量。从软件设计的角度来看,他们有许多缺点。
  • 使全局对象的初始化简单。这将使坚持第一个规则更容易。

对您的程序一无所知,当然很难提供更多具体的设计建议。