Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

[C++] GameDev Singleton.


Amxxl

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 2432 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Sveiki visi tiesiog pamaniau kas domisi žaidimų kūrimu gal kam pagelbės ypač tiems kas developina savo žaidimų variklius.

Programuodami C++ kalba dažnai susiduriame su situacijomis kai reikia tik vieno objekto pvž: Window, Input, Data manager, Renderer(maybe), Network ir t.t. šie dalykai programose dažniausiai inicijuojami tik kartą ir tam pakanka vieno objekto kiekvienam iš jų. Kiekvienoje klaseje kurti nauja objektą būtų nepraktiška. Tad kodėl nepasinaudojus Singleton pattern? (angliškas terminas). Kodo pavizdys:

#ifndef __SINGLETON_H
#define __SINGLETON_H

#include <assert.h>
#include "Memory.h"

template<class T>
class Singleton
{
	public:
		static bool CreateInstance()
		{
			if (Singleton::instance != nullptr)
				return false;

			Singleton::instance = new T();
			return true;
		}

		static void DeleteInstance()
		{
			SafeDelete(Singleton::instance);
		}

		static T& GetInstance()
		{
			assert(Singleton::instance != nullptr);
			return *instance;
		}

		static bool HasInstance()
		{
			return Singleton::instance != nullptr;
		}

	protected:
		Singleton() {}
		virtual ~Singleton() {}

	private:
		Singleton(Singleton const&) {}
		Singleton& operator=(Singleton const&) {}

		static T* instance;
};

template<class T>
T* Singleton<T>::instance = nullptr;

#endif

Taigi dėkim turim klase Window. Viska ką mums reikia padaryti tiesiog sukurti nauja objekta tai klasei pvz:

Singleton<Window>::CreateInstance();

Na ir štai dabar galima pasiekti objekta štai taip: Singleton<Window>::GetInstance();

Kai objektas nebenaudojamas galima ji ištrinti taip: Singleton<Window>::DeleteInstance();

Jei norime patikrinti ar klase turi objekta darom taip: if (Singleton<Window>::HasInstance())

Singleton pattern galima panaudot beveik visur kur reikia tik vieno objekto.

Memory.h faile tiesiog yra funkcija SafeDelete(); kuri atrodo taip:

 

template<class T> void SafeDelete(T* t)
{
    if (t != nullptr)
    {

        delete t;

        t = nullptr;

    }
}

Tikiuosi kam nors pravers :). Veteranai tiesiog skippinkit tema nieko čia mandro nėra. :D

Pats naudoju tai savo varikliui :)

Redaguota , nario -amxxL-
  • Teigiamai 2
Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 2432 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Svečias
Ši tema yra užrakinta.
  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


×
×
  • Sukurti naują...