У меня есть очень конкретный вопрос о динамически распределенном статическом глобальном объекте. В моем проекте у меня мало объектов, к которым мне нужно получить доступ из разных мест по потокам на протяжении всей жизни приложения. Я хочу создать при инициализации и отключении приложения, когда приложение завершит работу. Так что я попытался следующие,Global Static Динамически выделенные объекты C++
Header File: 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 уничтожается, когда приложение завершается.
- Где бы был создан объект Heap (поскольку я использую новую) или глобальную память (поскольку я использую статическую)? Или я нарушаю принцип ООП?
- Можно ли вызвать MyObjectFactory :: GetMyObject() из нескольких потоков?
- Это хороший способ добиться чего-то подобного Синглтона?
Пожалуйста, дайте мне знать ваши данные.
Большое вам спасибо!
'MyObject *' является указателем, а не ссылкой ... –
Либо «статический», либо «динамический», вы не можете иметь оба. –
Существует ли конкретное требование создания объекта с помощью 'new'? В противном случае просто сделайте глобальным «MyObject theObject;». –