Để cấp phát động, lúc runtime, size sẽ flexible, không cấp phát động thì làm sao dịch lúc run-time được. Nói rõ hơn ví dụ, tui khai báo :
char arrD[100]; -> nếu chuỗi khoảng size = 50, dư 50 để làm gì ?
char *arrD; -> cần bao nhiêu cấp phát bấy nhiều ví dụ cần 50 :
arrD = new char[50];
this là con trỏ tới đối tượng vậy suy ra -> *this = khử tham chiếu = đối tượng đó, quá tải toán tử gán trả về tham chiếu -> tham chiếu đến đối tượng đó. Tại sao trả về tham chiếu thì chỗ này để cascading*:
*cascading ví dụ : a = b = c.
Nếu cậu có đối tượng String a; String b; String c;
Nếu trả về đối tượng thì không xài cái technique đó được, để hiểu rõ tui sẽ nêu từng bước cho cậu thấy :
Bây h ví dụ :
MyClass a; //Tạo 1 đối tượng a
MyClass& b = a; //b là 1 tham chiếu tới đối tượng a, hiểu thoáng ra là 1 cái tên khác để xử lý trên a.
a.setValues(10); //Chỗ này tui xử lý thằng a, cho nó bằng 10.
b.setValues(10); //Chỗ này thằng b là 1 tên khác của a, vậy dòng này với dòng trên là 1 .
b = a.setValues(7); //Bây h dòng này, a được trả về tham chiếu tới chính nó và gán cho b, mà b đã là tham chiếu tới a vậy dòng này chẳng có tác dụng gì, lãng phí ( cái ở trên ta bàn nhưng ở 1 khía cạnh hàm cho dễ hiểu trước rùi tui nói đến toán tử gán.
Vậy a trả về tham chiếu
b.setValues(12); //Dòng này vì b là tham chiếu tới a, cho nên nó sẽ làm giá trị của a thay đổi
Vậy thay vì ghi 2 dòng :
b = a.setValues(7);
b.setValues(12);
Tui ghi 1 dòng cho tiện 
a.setValues(7).setValues(12);
Bây h toán tử đc định nghĩa lại tức là ví dụ :
String a;
String b;
a = b; //tức là tương đương với lời gọi hàm a.operator=(b);
Mà như tuy ám chỉ ở trên là dùng cho kĩ thuật cascading a = b = c;
Vậy trả về tham chiếu là hoàn toàn hợp lý.
Code:
a.operator=(b).operator=(c);
Trả về tham chiếu tương đương với 1 tham chiếu tới đối tượng đó, vì chỉ có tham chiếu + con trỏ là thay đổi giá trị được của đối tượng, nếu không trả về tham chiếu thì hoặc là trả về con trỏ, chỉ vậy thôi .