【发布时间】:2015-03-05 18:28:19
【问题描述】:
我是计算机科学专业的学生,我正在自学 C++,并尝试编写一个干净的 C++ 程序。
这是我的问题: 我正在编写一个 App 类,它将成为程序的主类,我希望我的很多类都可以访问将在主函数中创建的 App 对象。
基本上主函数会是这样的
int main(int argc, char *argv[])
{
App myApp;
return myApp.run();
}
App 类将有许多来自类的对象需要引用(或者在这种情况下是其他更好的东西吗?)到应用程序。 这是一个需要它的类的示例
class AppStateHandler{
private:
/// < Reference to the App
App& m_app;
public:
AppStateHandler(); // How can I initialize m_app with that ??
/// @param app The app the AppStateHandler will work with
AppStateHandler(App &app);
};
这是我的问题,在这种情况下使用引用作为类成员是否不好?我应该使用某种智能指针吗? 在使用引用的情况下,我无法创建 默认构造函数,因为 m_app 必须在构造函数初始化列表中初始化 所以,没有默认值是不是很糟糕构造函数?
如果您对如何改进我的代码有任何建议,我很感兴趣。
非常感谢!
编辑:我实际上想让 AppStateHandler 成为 App 的成员。在主函数中声明的唯一对象是 App。
【问题讨论】:
-
如果有可能无法将类链接到应用程序,我建议使用智能指针。
-
我个人更喜欢对象将指针存储为成员而不是引用,因为它允许以后重新分配它们。
-
“我希望我的很多类都可以访问 App 对象”——这通常是个坏主意。就像使用全局变量一样,它导致了意大利面设计。
-
我同意,但是我所有的 AppStates 都会有一个 render() 过程,它必须在属于应用程序的 SFML 窗口上绘制东西,所以我需要调用类似 m_app- >getWindow().draw(thingToDraw);我从一些使用 SFML 的 Game Engine 示例中举了一个例子,这种设计似乎很常见,即使它可能不太好,我正在寻找另一种设计。
标签: c++ class reference smart-pointers