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 |
Singleton - Sablon creational
Last Updated: Jun 23 2017 13:04, Started by
adi94
, Jun 21 2017 13:59
·
0
#1
Posted 21 June 2017 - 13:59
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 ) |
#2
Posted 21 June 2017 - 15:35
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 Edited by StefanSC, 21 June 2017 - 15:50. |
#3
Posted 21 June 2017 - 15:43
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
Posted 21 June 2017 - 18:30
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
Posted 21 June 2017 - 19:12
PS: Singletonul, ca idee, incepe sa scartie cand vine vorba de multithreading, indiferent de limbaj.
|
#6
Posted 22 June 2017 - 08:30
dani.user, on 21 iunie 2017 - 19:12, said:
PS: Singletonul, ca idee, incepe sa scartie cand vine vorba de multithreading, indiferent de limbaj. Hai ca mi-a luat o ora da m-am prins pana la urma.) Mersi. |
#7
Posted 22 June 2017 - 08:44
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
Posted 22 June 2017 - 11:32
#9
Posted 23 June 2017 - 11:42
De ce ar trebui evitat? Lock-urile pe singleton-uri sunt un bad practice?
|
#10
Posted 23 June 2017 - 12:57
|
#11
Posted 23 June 2017 - 13:04
LittleWho, 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
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users