Вопрос о назначении оператора - PullRequest
0 голосов
/ 29 апреля 2020

Здравствуйте, я уже некоторое время изучал конструкторы копирования, и я столкнулся с этим предложением на одном из сайтов:

Когда выполняется побитовое (оператор присваивания) назначение обоих общих объектов та же самая область памяти и изменения в одном объекте отражаются в другом объекте. , поэтому позже я попытался изучить его и посмотреть, так ли это, я написал несколько простых кодов, как показано ниже:

class Base{

public:

Base(int age, string name) :age(age), name(name) {};
Base() {};
void display() {
    cout << age;
}
int age;
string name;

};

int main () {

Base b1(5, "Alek"),b2;

b2 = b1;

b1.display();

b2.age = 10;

b1.display();

system("pause");

, поэтому в зависимости от того, что там написано, второй вызов b1.display () должен иметь значение 10? но почему он все еще показывает тот же результат?

1 Ответ

0 голосов
/ 29 апреля 2020

Конструкторы копирования работают путем копирования всех значений одного объекта в другой объект.

Используя базовый класс, все переменные-члены копируются в b2 при вызове конструктора копирования.

Единственная проблема возникает, когда у класса есть указатели. Попробуйте заменить int age; на int* age; Когда вызывается конструктор копирования, переменная возраста b2 будет указывать на ту же память, что и переменная возраста b1.

Сам указатель, если копируется, но не память Dynami c Данные хранятся в том месте, где находится указатель.

...