Я узнал о трех случаях вызова конструктора копирования
1.Переменная инициализируется из объекта того же класса
2.Функция вызывается с параметром значения класса
3.Функция возвращает значение, которое является объектом класса
Также в учебнике написано для двух вышеупомянутых случаев (case2 и 3), чтобы избежать вызова конструкторов копирования, используйте call-by-ссылка
Я искал некоторую информацию, но не могу точно понять.
Например (я сделал свой собственный код)
class CpClass{
int p;
CpClass(const CpClass &obj){
cout<<"user-defined constructor"<<endl;
p = obj.p;
}
~CpClass(){
cout<<"destructor"<<endl;
}
};
void show1(String &s)
{ cout << "show1 : " << s.p; }
void show2(String s)
{ cout << "show2 : " << s.p; }
int main(){
CpClass c1(10);
CpClass c2(c1);
show1(c2);
show2(c2);
};
Я нашелнекоторая информация об этом.
Первый , Когда мы передаем аргумент, который является объектом класса, если параметр является ссылочной формой, а не значением, он не вызывает деструктор, как только функцияЯ отправил.Он вызывает деструктор, когда основная функция завершается
Second , он вызывает конструктор, когда копирует аргумент, является ли форма параметра вызовом по значению или вызовом по ссылке (в коде, String & s или String s)
Я прав или нет?