Разные обьекты синглетона

373
25 сентября 2017, 03:31

Есть два класса: А и B. A это Sigleton, B простой класс(для примера). Так вот, разные объекты класса А никак не связаны между собой.

#include <iostream>
using namespace std;
class B {
public:
    B(int a, int b) {
        this->a = a;
        this->b = b;
    }
    int a, b;
};
class A {//singleton
private:
    A(){}
public:
    int x, y;
    B* b;
    static A getInstance() { 
        static A instance;
        return instance; 
    }
    bool operator==(const A& a) {
        return a.x == this->x && a.y == this->y;
    }
};
void main() {
    A* a1 = &A::getInstance();
    A* a2 = &A::getInstance();
    a1->x = 121;
    a1->b = new B(65, 12);
    cout << a2->b->a << endl;
    system("pause");
}

В это случае a1.x=121, a1.y=0, a1.b.a=65, a1.b.b=12, а у объекта a2 - дефолтные значения(a2.x=0, a2.y=0, a2.b=NULL). Что происходит?!

Answer 1

Вы возвращаете копии объекта (кстати, закрыв конструктор по умолчанию, вы не закрыли копирующий конструктор!):

static A getInstance() { 
    static A instance;
    return instance; 
}

Нужно возвращать ссылку -

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

Вообще непонятно, что у вас происходит и как оно компилируется:

A* a1 = &A::getInstance();

Вы получаете указатель на временный объект...

READ ALSO
Системы сборки проектов C/C++

Системы сборки проектов C/C++

Думаю над тем как обустроить быт разработки на C/C++ под линуксНа CLion денег жалко

394
Вопрос по задаче (C4) в ЕГЭ по информатике

Вопрос по задаче (C4) в ЕГЭ по информатике

Считается ли мое решение эффективным по времени? Понимаю, что по памяти оно неэффективно, тк используются структуры данных\контейнеры, а вот...

304
gets_s() в цикле съедает первый символ в строке

gets_s() в цикле съедает первый символ в строке

Всем доброго времени сутокВот такой вопрос:

320
RunTime Error на DFS задаче C++

RunTime Error на DFS задаче C++

Первый раз написав решение этой задачи на привычном себе питоне, натолкнулся на ошибку TimeLimit, деваться некуда - переписал на С++, и теперь, на 15-м тесте...

356