алгоритм — c ++ конструктор копирования связанный запрос

#include<iostream>
class A{
public :
int a;
};
int main(){
A obj;
obj.a = 5;
A b(obj);

b.a = 6;
std::cout<<obj.a;
return 0;

}

почему ответ возвращается как 5, по умолчанию конструктор копирования в C ++ возвращает поверхностную копию. Разве мелкая копия не означает ссылку?
или я что-то упустил?

0

Решение

мелкая копия означает ссылку ?? или я что-то упустил?

Вы что-то упускаете. Мелкая копия означает копирование. Он копирует всех членов объекта из одного в другой. Это НЕ ссылка. Созданная копия полностью независима от оригинала

Увидеть этот отличный учебник для разницы между мелкой и глубокой копией.

3

Другие решения

b это совершенно отдельный объект от obj, Имеет свой a независим от obj«S.

Похоже, что вы имеете в виду ссылка:

A& b = obj;

После этого оба b а также obj ссылаются на тот же объект. Изменения, сделанные через b было бы видно через obj и наоборот.

2

мелкая копия означает ссылку ?? или я что-то упустил?

Да, ты что-то упустил.

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

В вашем случае, мелкое копирование и глубокое копирование не имеют значения, потому что в классе нет указательных членов. Каждый участник копируется (по-прежнему), и поскольку ни один элемент не является указателем, каждый скопированный элемент является разные член в памяти. То есть исходный объект и скопированный объект — это совершенно разные объекты в памяти. Нет абсолютно ничего, что эти два объекта разделяют друг с другом. Поэтому, когда вы изменяете одно, это совсем не меняет ничего в другом.

2

Да, конструктор копирования по умолчанию является мелкой копией. Узнать больше Вот

Но, b полностью не пересекается с a, поэтому две вещи не связаны напрямую.

0

A b(obj) копии obj информация во вновь созданный объект b, Да это мелкая копия так b на самом деле не контролирует то, что ему назначено. То, о чем вы, вероятно, думаете, это ссылка:

A& b = obj;

b.a = 6;

std::cout << obj.a; // 6
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector