Я изо всех сил пытаюсь объяснить ситуацию.Надеюсь, то, что я написал, понятно.У нас уже есть класс, определенный как
public ref class TestClass
{
public:
TestClass();
virtual ~TestClass();
protected:
Car* m_car;
}
TestClass
управляемый C ++ и Car
неуправляемый C ++.
Пока все хорошо, но теперь мне нужно сделать статический объект из TestClass
также.Поэтому я изменяю код, как показано ниже
public ref class TestClass
{
private:
static TestClass^ s_test = nullptr ;
public:
TestClass();
virtual ~TestClass();
static TestClass^ Instance();
protected:
Car* m_car;
}
Когда я хочу использовать статический момент класса, я просто получаю его от вызова
TestClass staticobj = TestClass::Instance();
В другом месте, просто позвоните
TestClass normalobj = gcnew TestClass();
Функция экземпляра создает s_test
статический объект и возвращает его.
TestClass ^ TestClass::Instance()
{
if(s_test == nullptr)
{
s_test = gcnew TestClass();
s_test->m_car = new Car();
}
return s_test;
}
Это хороший подход?Есть ли другой лучший подход для достижения того же результата?
Редактировать: К вашему сведению Вышеприведенный код работает.
Я объединил решения Krizz и Reed Copsey.Это решает независимый синглтон и утечка памяти.Вот мой пример кода, Специальный класс Singleton, полученный из тестового класса,
public ref class SpecialSingletonTestClass: public TestClass
{
private:
static SpecialSingletonTestClass ^ s_ SpecialSingletonTestClass = nullptr;
public:
SpecialSingletonTestClass ();
static SpecialSingletonTestClass ^ Instance();
};
Изменен тестовый класс, так что теперь у него есть еще одна функция финализатора.
public ref class TestClass
{
public:
TestClass ();
virtual ~ TestClass ();
! TestClass ();
protected:
Car* m_car;
}
Я тестировал выше шаблон, этоработал.
Спасибо вам, ребята,
LE