我对动态分配的静态全局对象有非常具体的问题。在我的项目中,我几乎没有需要在整个应用程序生命周期中跨线程从不同位置访问的对象。我想在应用程序初始化时创建并在应用程序退出时销毁。所以我尝试了以下,
头文件:MyObjectFactory.h
class MyObjectFactory{
public:
static MyObject* GetMyObject();
};
源文件:MyObjectFactory.cpp
static MyObject* gMyObject = 0;
MyObject* MyObjectFactory::GetMyObject(){
if(gMyObject == 0)
{
gMyObject = new MyObject();
}
return gMyObject;
}
这段代码似乎可以工作,但我想清除一些东西。
- 对象只会被创建一次,然后将返回对对象的引用。(我想要这个,因为 MyObject 封装了一些系统资源,如文本文件)
- 当应用程序退出时,MyObject 被销毁。
- 对象创建堆(当我使用 new 时)或全局内存(当我使用静态时)会在哪里?还是我违反了任何 OOP 原则?
- 可以从多个线程调用 MyObjectFactory::GetMyObject() 吗?
- 这是实现有点类似于 Singleton 的好方法吗?
请让我知道您的意见。
太感谢了!