Đối tượng: stack hay heap?

Trong mấy code mẫu C++ e hay bắt gặp tình huống này

Thay vì khia báo và sử dụng đối tượng một cách trực tiếp như này:

className objectName;
objectName.method();

Thì người ta lại sử dụng như này:

className *objectPointer = new className;
objectPointer->method();

Vậy khi nào nên dùng trường hợp 1, khi nào nên dùng trường hợp 2 ạ !!!

1 Like

Code 2 thì từ bên Java qua toàn viết thế :smiley:

2 Likes

Lại phán bậy rồi. Đem từ java nào ở đây sang. Trong c++. Cách 1 biến sẽ tồn tại trên stack. Cách 2 biến sẽ tồn tại trên heap. Cách 1 là thao tác biến trực tiếp. Cách 2 là dùng con trỏ để quản lý bộ nhớ, tìm hiểu thêm về khái niệm còn trỏ và ứng dụng sẽ hiểu

3 Likes

Hi Linh Truc Vo.
Thường thì mình viết theo cách 2 tuy nó hơi phức tạp nhưng thường thì với các đối tượng lớn nó sẽ chiếm nhiều stack dễ gây tràn còn các đối tượng nhỏ và thường dùng thì bạn có thể tạo trên stack để tối ưu.

1 Like

Khi e khai báo

className objectName

Vùng nhớ của object sẽ nằm trên Stack

Khi e khai báo

className *objectName = new className

Vùng nhớ của object sẽ nằm trên Heap

  • Khi ra khỏi scope được khai báo, vùng nhớ trên Stack tự động được hủy.

  • Còn vùng nhớ trên Heap chỉ được hủy khi e gọi hàm delete hoặc free để hủy.

  • Vùng nhớ trên stack là private cho mỗi stack frame, thread.

  • Còn vùng nhớ trên heap thì có thể truy cập từ những thread hoặc stack frame khác.

Nên,

  • khi object chỉ được sử dụng trong phạm vi 1 hàm, thì e nên dùng cách 1.
  • khi object có phạm vi sử dụng rộng hơn nơi nó được khai báo hoặc cần chia sẻ tới những nơi khác trong chương trình thì e nên sử dụng cách 2.

Ngoài ra, sử dụng cách 2, e có thể sử dụng được tính đa hình của C++.

2 Likes

Có thể dùng tham chiếu :smiley:

3 Likes

Ừm, Có thể dùng tham chiếu nữa :smiley:
Lúc trả lời bài viết, cứ nghĩ tới ví dụ hình đa giác, hình tam giác, vuông tròn. Nên quên vụ này mất tiêu :+1:

“với các đối tượng lớn nó sẽ chiếm nhiều stack dễ gây tràn”

E kết câu này quá ạ !!!
E Cảm ơn a nhiều :smiley: !!!

E cảm ưn a nhiều ạ :smiley:
E mới xem qua sách của GS Phạm Văn Ất của nói về đa hình, thì thấy cùng con trỏ linh hoặt hơn, trỏ tới các đối tượng dẫn xuất bla bla, hơi bị phiêu luôn :v

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