Hỏi về cách sử dụng con trỏ khi tạo đối tượng trong C++?

Xin chào mọi người,
Mình có vấn đề như sau :
Vd mình có 1 class Hoso

Bình thường khi tạo 1 đối tượng mới, mình sẽ dùng : Hoso hoso1, Hoso hoso2,… Nhưng hôm nay khi tìm hiểu thì mình thấy có 1 cách tạo khác là dùng con trỏ : Hoso *x = new Hoso;
Và khi xuất size of, nếu dùng con trỏ thì chỉ có 4 bytes, còn dùng 1 đối tượng bình thường thì có thể > 4 bytes.

Vậy mình muốn hỏi là:

  • Trong trường hợp này con trỏ có được coi là 1 đối tượng ?
  • Size of của 1 con trỏ chỉ có 4 bytes, vậy có phải khi dùng con trỏ sẽ tiết kiệm được bộ nhớ hơn khi dùng 1 đối tượng bình thường không ?
  • Việc dùng con trỏ thay cho đối tượng bình thường có ưu điểm gì không ?

Cảm ơn mọi người

  1. Mình thấy nó giống như cho một con trỏ kiểu int rồi cấp phát động cho nó vùng nhớ thì có gọi là mảng không ?
int * arr = new int[5];
2. Không có tiết kiệm thêm tý nào đâu Bản chất là cấp phát bộ nhớ tự động. Một cái là tự cấp phát rồi tự hủy
3. Cấp phát và thu hồi theo ý muốn.  

Kiến thức t hiểu  v thôi
2 Likes

this can answer your question

1 Like

Mình muốn hỏi về con trỏ được dùng như 1 đối tượng đó bạn, còn bài viết bạn gửi là phân biệt giữa pointer và reference mà :smiley:

con trỏ với reference là hơi giống nhau, nhưng con trỏ đâu phải là đối tượng cả đều tham chiếu tới đối tượng thôi à

1 Like

Vậy bạn ơi cho mình hỏi, trong trường hợp này :
Hoso *x = new Hoso;
con trỏ tham chiếu đến đối tượng nào ? Đối tượng đó là gì và ở đâu ? Trong ví dụ mình xem, họ có thể dùng con trỏ như 1 đối tượng vậy á : x.thongtin, x.nhapthongtin(), … Mong bạn giải thích giúp mình, cảm ơn bạn nhiều lắm :smiley:

Đầu tiên bạn cần phải biết là đối tượng khác và con trỏ khác, con trỏ giống như tham chiếu đều tham chiếu tới đối tượng chứ con trỏ không phải là đối tượng, đối tượng vì đối tượng nó nằm trên heap và nó chỉ là 1 khoảng ô nhớ trên heap và trong ô nhớ đó là những dữ liệu dành cho máy hiểu thôi mình không cần hiểu
Nên trong vi dụ đó thì con trỏ hoạt động cũng như tham chiếu chỉ có vài điều khác biệt giữa 2 cái thôi

1 Like
  1. Con trỏ không được coi là 1 đối tượng, nó chỉ chứa địa chỉ của đối tượng thôi.
  2. Sizeof của một con trỏ sẽ là 4 byte, nhưng có vẻ như ngoài sizeof của đối tượng lại cần thêm 4 byte để chứa địa chỉ của đối tượng.
  3. Không có nhiều ưu điểm và khác biệt lắm, nếu có thì nó giống với vấn đề cấp phát bộ nhớ ở stack và heap (cần nhiều bộ nhớ hơn chẳng hạn).
2 Likes
  1. Như trên
  2. sizeof trả về số lượng byte cấp phát cho biến. Số lượng byte cấp phát để lưu con trỏ phụ thuộc vào nền tảng, với win32 thì mỗi địa chỉ sẽ được lưu trong 4 bytes.
  3. Khác biệt nằm ở chổ Instance được lưu ở 2 vùng nhớ khác nhau.
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?