如果我必须组织编译资源,那是不好的做法吗?
Is it bad practice if I have to organise Compile Sources
我正在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当前系统的文件顺序,但是可能会更改。
是的,从根本上有问题。
黄金规则
- 重要:在全局对象的初始化时,请勿使用来自不同源文件的任何其他全局对象。
- 不要过度使用全局变量。从软件设计的角度来看,他们有许多缺点。
- 使全局对象的初始化简单。这将使坚持第一个规则更容易。
对您的程序一无所知,当然很难提供更多具体的设计建议。
相关文章:
- 具有瞬态资源的RAII类
- 二叉排序树无法编译
- 使用 Bazel 编译 QT 应用程序时访问资源
- Qt - 为什么Visual Studio 2019在qml资源中添加10Mb文件后无法再编译我的项目?
- 减少使用 GSL 用于 ODE 系统的编译资源
- MSBuidel - 将资源文件添加到项目后静态库编译失败
- 如果我必须组织编译资源,那是不好的做法吗?
- 使用资源文件编译C++时出错
- 如果我在Visual Studio项目中将图像作为资源包含在内,这些图像是否会编译到可执行文件中
- Visual Studio 2012 中的条件资源编译
- Qt资源文件不会在不编译的情况下更新
- 如果 qrc 资源被正确编译到二进制文件中,它们会在哪里丢失
- 资源编译器无法在Win32的资源脚本中编译枚举语句
- clang 在 Coliru 中编译此代码段,但不在编译器资源管理器中编译.为什么
- 用*.h和*编译扩展文件.所以没有*.cpp资源代码
- c++编译类型资源所有者断言
- 如何将Qt样式表移动到外部文件,但保持它在资源中编译
- 无法在C++Builder 2006中编译应用程序清单的资源
- 调试MSVC2010 Express和Qt 4.8 (Qt Creator 2.4.1)下的资源文件编译(rc.exe)
- 使用QT5_ADD_RESOURCES和CMake进行多线程编译时,资源.cpp文件已损坏