30/09/2018, 17:39

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

Evil viết 19:53 ngày 30/09/2018
  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
hong duc viết 19:45 ngày 30/09/2018

this can answer your question

stackoverflow.com
prakash

What are the differences between a pointer variable and a reference variable in C++?

c++, pointers, reference, c++-faq
asked by prakash on 08:03PM - 11 Sep 08
Hoàng Việt viết 19:54 ngày 30/09/2018

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à

hong duc viết 19:43 ngày 30/09/2018

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 à

Hoàng Việt viết 19:51 ngày 30/09/2018

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

hong duc viết 19:48 ngày 30/09/2018

Đầ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

Minh Hoàng viết 19:43 ngày 30/09/2018

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 ?

  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).
Bao "Storm" Le viết 19:39 ngày 30/09/2018
  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.
Bài liên quan
0