【发布时间】:2012-05-29 15:41:19
【问题描述】:
我对动态分配的静态全局对象有一个非常具体的问题。在我的项目中,我几乎没有需要在整个应用程序生命周期中跨线程从不同位置访问的对象。我想在应用程序初始化时创建并在应用程序退出时销毁。所以我尝试了以下,
头文件: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 的好方法吗?
请告诉我您的意见。
非常感谢!
【问题讨论】:
-
MyObject*是指针,不是引用... -
“静态”或“动态”,不能同时拥有。
-
是否有特定要求使用
new创建对象?否则,只需将其设为全局MyObject theObject;。
标签: c++ static heap-memory global