01/10/2018, 12:21

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

rogp10 viết 14:23 ngày 01/10/2018

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.

Nchau viết 14:31 ngày 01/10/2018

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

chazo1994 viết 14:33 ngày 01/10/2018

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.
chazo1994 viết 14:27 ngày 01/10/2018

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

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ó.

rogp10 viết 14:22 ngày 01/10/2018

chỉ copy x ra một biến mới

Có copy constructor nhé

chazo1994 viết 14:35 ngày 01/10/2018

truyền

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

Bài liên quan
0