Lưu ý nhỏ khi sử dụng c++

      Comments Off on Lưu ý nhỏ khi sử dụng c++

1. Nếu 1 hàm nhận tham số là object thì nên truyền theo kiểu tham chiếu hoặc con trỏ để đỡ tốn công chạy hàm copy constuctor

F(A*  a);

F(A &a);

2.Nếu muốn return 1 class thì thường return con trỏ.

A* f(){

A *p = new …

return p;

}

Nếu nguy hiểm có thể return smart pointer.

3. Khi muốn override lại hàm của cha thì con phải khai báo từ khóa virtual.

Toàn bộ hàm deconstructor phải khai báo virtual.

Nếu không khai báo từ khóa virtual sẽ dẫn tới memory leak trong trường hợp sau:

#include <iostream>

class A {
   public:
   ~A(){
        std::cout << "~A"<<std::endl;
   }
};

class B:public A{
   public:
   ~B(){
       std::cout <<"~B" <<std::endl;
   }
};

int main(){
   A *a = new B();
   delete a;
   return 0;
}

Khi không có từ khóa virtual thì chỉ deconstructor của A được gọi

~A
...

Khi thêm từ khóa virtual vào deconstructor của A thì ta sẽ có kết quả khác

#include <iostream>

class A {
   public:
   virtual ~A(){
        std::cout << "~A"<<std::endl;
   }
};

class B:public A{
   public:
   ~B(){
       std::cout <<"~B" <<std::endl;
   }
};

int main(){
   A *a = new B();
   delete a;
   return 0;
}

Result

~B
~A

So good.