Nhờ giải thích hàm tạo và hủy khi truyền tham trị vào hàm

tại sao lại có 2 hàm hủy và 1 hàm tạo

> #include <iostream>
> using namespace std;
> class Car{
> 	public:
> 		Car(){cout<<"khoitaocar ";
> 		}
> 		~Car(){cout<<"HuyCar ";
> 		}
> };
> void fun(Car a){
> 	
> }
> int main(){
> 	Car x;
> 	fun(x);
> }

nếu hàm fun truyền vào tham chiếu &a thì lại chỉ có 1 hàm tạo và 1 hàm hủy

ai biết rõ giải thích hộ e cái

Hàm hủy gọi 2 lần thì dễ hiểu rồi, nhưng thực chất có hai hàm tạo khác nhau được gọi trong đoạn code trên.

Có 2 hàm tạo nhưng sao nó chi chay 1 lân nhỉ có rule nào k nhỉ

theo mình hiểu:

  • khi truyền “a”: thì một biến mới được tạo và là copy của a nên sé có 2 hàm hủy cho hai đối tượng khác nhau được gọi (x và copy of x)
  • khi truyền “&a”: thì ko có bản copy nào được tạo ra hết mà chỉ thay đối giá trị trên chính “x” nên chỉ có 1 hàm hủy và một hàm tạo.
2 Likes

có hai đối tượng nhưng chỉ có một hàm tạo được gọi. Vì lúc đầu khi khai báo Car x; thì hàm tạo sẽ được gọi, nhưng lúc sau “fun(x);” truyền x vào hàm fun thì chỉ copy x ra một biến mới chứ không khởi tạo nó.

Có copy constructor nhé :smiley:

1 Like

Tức là gọi hàm tạo hai lần ???

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?