Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Dupa renuntarea la aparat dentar

pelerinaj in Balcik

Noul format Jpegli iși propu...

Dade, dade
 Parola la lock screen

Deparazitare externa pisici fara ...

Seriale turcesti/coreene online H...

Merita un Termostat Smart pentru ...
 Sfat achizitie MTB Devron Riddle

Problema mare cu parintii= nervi ...

switch microtik

Permis categoria B la 17 ani
 Sfaturi pentru pregatirea de eval...

Crapaturi placa

cum imi accesez dosarul electroni...

Momentul Aprilie 1964
 

Singleton - Sablon creational

- - - - -
  • Please log in to reply
10 replies to this topic

#1
adi94

adi94

    Junior Member

  • Grup: Members
  • Posts: 190
  • Înscris: 06.11.2011
Salut baieti, m-am uitat si eu de curiozitate peste niste sabloane de creeare (singleton se asigura ca exista tot tipul o singura instanta a clasei respective).
Codul zice cam asa:

#include <iostream>
// ---->> SINGLETON <<-----
using namespace std;
class Singleton {
private:
		 static Singleton uniqueInstance;
		 int data;
		 Singleton(int d) :data(d) {}
		 Singleton(const Singleton & ob);
public:
		 static Singleton& instance() { return uniqueInstance; }
		 int getValue() { return data;}
		 void setValue(int value) { data = value; }
};
Singleton Singleton::uniqueInstance = 100; //de ce este utilizat contructorul atunci cand se initializeaza variabila statica?
int main() {
Singleton & s1 = Singleton::instance();
cout << "instanta 1 : "<<s1.getValue() << endl;
Singleton & s2 = Singleton::instance();
s2.setValue(19);
cout << "instanta 2 : "<<s1.getValue() << endl;
return 0;
}


Aici este apelat contructorul:
Singleton Singleton::uniqueInstance = 100;


Intrebarea mea este de ce se face asta?
Acolo in mod normal ar trebui sa fie setata valoarea unui variabile statice si asta nu implica instantierea constructorului nu?
PS: Este evident ca nu este asa dar nu inteleg de ce Posted Image)

#2
StefanSC

StefanSC

    Senior Member

  • Grup: Senior Members
  • Posts: 4,730
  • Înscris: 02.07.2011
Sper sa te ajute:
http://www.cprogramm..._vs_define.html

Si:

http://en.cppreferen...language/static

Din pacate, desi le inteleg, stau foarte prost la explicat lucrurile acestea Posted Image

Edited by StefanSC, 21 June 2017 - 15:50.


#3
tavitu

tavitu

    Minune: HE a început să emită facturile!

  • Grup: Senior Members
  • Posts: 5,598
  • Înscris: 16.02.2009
Variabila statică uniqueInstance este un obiect de tipul Singleton, iar orice obiect este inițializat ("setata valoarea") prin apelul unui constructor corespunzător.

http://en.cppreferen...ing_constructor

PS un constructor nu se instanțiază! Un obiect este instanțiat, un constructor este apelat.

Edited by tavitu, 21 June 2017 - 15:44.


#4
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,238
  • Înscris: 24.02.2007
C++ iti initilizeaza mereu instantele claselor/structurilor. It's a feature.

Daca ai constructor fara parametrii, e apelat. Daca n-ai constructuri, iti genereaza unul default.
Daca ai doar constructor cu parametrii, nu-ti mai genereaza altul, dar te obliga sa oferi mereu parametrii pt a crea obiectul.

#5
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,238
  • Înscris: 24.02.2007
PS: Singletonul, ca idee, incepe sa scartie cand vine vorba de multithreading, indiferent de limbaj.

#6
adi94

adi94

    Junior Member

  • Grup: Members
  • Posts: 190
  • Înscris: 06.11.2011

View Postdani.user, on 21 iunie 2017 - 19:12, said:

PS: Singletonul, ca idee, incepe sa scartie cand vine vorba de multithreading, indiferent de limbaj.
Am citit chestia asta insa am vazut ca se foloseste un lock cand se lucreaza cu thread-uri pentru a putea preveni instantierea a doua obiecte in acelasi timp.
Hai ca mi-a luat o ora da m-am prins pana la urma.:))
Mersi.

#7
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Instanțierea ca instanțierea, dar cu manipularea paralelă a datelor din spatele singletonului ce te faci?

Singleton nu e bun de folosit, trebuie să știi ce e ca să îl poți evita pe cât posibil.

#8
adi94

adi94

    Junior Member

  • Grup: Members
  • Posts: 190
  • Înscris: 06.11.2011

View PostOriginalCopy, on 22 iunie 2017 - 08:44, said:

Instanțierea ca instanțierea, dar cu manipularea paralelă a datelor din spatele singletonului ce te faci?

Singleton nu e bun de folosit, trebuie să știi ce e ca să îl poți evita pe cât posibil.
Foarte bun punct de vedere, la asta nu m-am gandit.

#9
LittleWho

LittleWho

    Member

  • Grup: Members
  • Posts: 288
  • Înscris: 30.11.2013
De ce ar trebui evitat? Lock-urile pe singleton-uri sunt un bad practice?

#10
Mosotti

Mosotti

    Geniu umil

  • Grup: Senior Members
  • Posts: 33,295
  • Înscris: 21.04.2004

View Postdani.user, on 21 iunie 2017 - 19:12, said:

PS: Singletonul, ca idee, incepe sa scartie cand vine vorba de multithreading, indiferent de limbaj.

Chestia asta e thread safe in C+11:

static Singleton& getInstance()
{
static Singleton instance;
return instance;
}



#11
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View PostLittleWho, on 23 iunie 2017 - 11:42, said:

De ce ar trebui evitat? Lock-urile pe singleton-uri sunt un bad practice?

Locks în general sunt bad practice.

Există alte tehnici de sincronizare mult mai robuste.

Și în general, singletonurile pot fi eliminate prin schimbări în arhitectură.

Dacă ai un singleton, ai probabil unul la câteva milioane de linii de cod pe proiect.

Anunturi

Chirurgia spinală minim invazivă Chirurgia spinală minim invazivă

Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical.

Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate