Как правильно очистить статический класс в С++

Мне нужно иметь одноэлементный класс, поскольку мне нужно инициализировать некоторые переменные только один раз. У меня проблема, когда я не могу очистить класс, поскольку он рушится. Вот вырезанная версия моего класса:

#include "stdafx.h"
#include <iostream>

class MyClass
{
public:
 MyClass();
 virtual ~MyClass();

 static MyClass& Instance();
 void DoSomething();
};

MyClass::MyClass()
{
 std::cout<<"MyClass constructor"<</iostream>
<p> Когда я вызываю delete & myClass, деструктор получает вызов, а затем он взрывается так:</p> <p> </p> <p> Я исследовал, и я думаю, что я не должен вызывать delete для объекта, который не был создан с использованием new. Это верно??</p> <p> Является ли ответ просто не использовать никакого удаления и позволяет деструктору автоматически вызываться, когда он выходит из области видимости (когда основной возвращается)?</p>
3 ответа

Я не должен вызывать delete для объекта, который не был создан с помощью new.

Абсолютно. Это статический объект, который будет автоматически уничтожен в конце программы. Нет нужды (и никоим образом) уничтожить ее самостоятельно.

(Обратите внимание, что, будучи статичным, он не уничтожается, когда он выходит из области действия при возврате Instance(). Вместо этого он уничтожается в конце программы, после возврата из main() или вызова exit()).


Ваша ошибка связана с удалением (как упоминалось другими).

Мне нужно иметь одноэлементный класс, поскольку мне нужно инициализировать некоторые переменные только один раз.

Нет, вы действительно (действительно, правда) этого не делаете. Синглтоны решают проблему централизации значений/настроек, вводя скрытое состояние, затягивая модульную связь, скрывая зависимостей модулей и отказоустойчивый код рендеринга.

Вместо этого подумайте об использовании инъекции зависимостей.


Когда статический объект выходит из области видимости, они будут удалены автоматически, поэтому не звоните, удаляя статический объект, и вы должны быть в порядке

licensed under cc by-sa 3.0 with attribution.