30/09/2018, 20:55
Sự khác nhau giữa một pointer và một object trong OOP C++
Mọi người giúp Em phân biệt một Pointer và một Object trong lập trình hướng đối tượng c++ với ạ. E đang bị rối.
Ví dụ:
Class A{
};
int main(){
A *a1 = new A();
A a2;
}
a1 và a2 khác nhau gì ạ.
Bài liên quan
This post was flagged by the community and is temporarily hidden.
Có thể phân biệt đơn giản như sau:
ủa như vậy chưa đủ bạn biết đâu là con trỏ đâu là obj à
This post was flagged by the community and is temporarily hidden.
Em nghĩ có khi nào nó liên quan tới stack và heap k ạ. vì Em nhớ là một biến khi được new thì vùng địa chỉ giá trị được lưu trong heap còn những biến kk new sẽ nằm ở stack ??? k biết có đúng không
mình chỉ muốn tìm hiểu sâu hơn thôi chứ không có gì.
Đúng rồi, dùng con trỏ khi new nó sẽ khởi tạo bộ nhớ trong vùng heap.
Khi sử dụng con trỏ new thì phải nhớ delete trước khi con trỏ trỏ đến vùng nhớ khác/con trỏ ra khỏi scope(phạm vị được con trỏ được khai báo)/khi new lần nữa nếu ko sẽ bị memory leak.
Để tránh memory leak thì hoặc là ng lập trình phải lập trình cẩn thận hoặc là như những ngôn ngữ như c#, java nó sẽ dọn cho mình nếu ko còn dùng nữa. Tuy nhiên nhiều lúc nó không dọn hết.
Nhưng trong C ko có cái chức năng garbage collection (GC) trên nên ta phải dọn tay hay dùng smart pointer để dọn hộ. Bh thì khuyên dùng smart pointer vì khi sử dụng con trỏ con rất nhiều thứ phức tạp mà trong khi làm ta không thể tự tay dọn phần memory đã cấp phát vì ko biết lúc nào nó thực sự dùng xong.
Bạn hãy đọc thêm về smart pọinter và memory leak để biết ưu nhược điểm của chúng. Rất hữu ích đấy!
This post was flagged by the community and is temporarily hidden.
vậy a và b khác gì nhau ?
cái đó Em có biết sơ sơ mà để phân biệt pointer và object thì ngoại trừ lưu trữ ra thì Em tịt.
a và b khác ở điểm này:
int *a = new int
thục hiện 2 việc. 1 là khai báo 1 con trỏ int tên a. Nó sẽ chiếm 1 vùng nhớ 4->8bytes ở stack. 2 là cấp phát 1 vùng nhớ có kích thước = 2 byte ( =sizeof integer) trong heap và để a trỏ vào đầu vùng nhớ mới câp phát.int b
thì khai báo 1 biến int tên b có kích thước 2 byte trong stackThis post was flagged by the community and is temporarily hidden.
Pointer là để chỉ trỏ vào 1 vùng nhớ.
Khi tạo 1 một object thực ra nó chỉ là tạo 1 vùng nhớ có kích thước lớn hơn hoặc bằng tổng kích thước các thuộc tính của class đó.
Pointer chỉ vào object thực ra là chỉ vào đầu vùng nhớ của object nhưng nó biết object lớn cỡ nào nên biết từ chỗ nó trỏ đến bao nhiêu byte nữa thì đó là vùng nhớ của object
viết tiêu đề hơi nhầm
vậy giá trị của một object trong C++ là gì ạ ?
This post was flagged by the community and is temporarily hidden.
Hiện tại mình có biết được 2 cái đó là:
Tài liệu đọc thêm : http://stackoverflow.com/questions/5372707/in-c-whats-the-difference-between-an-object-and-a-pointer-to-an-object
Pointer lưu địa chỉ tới Object. Bạn có thể tưởng tượng 1 instance của Object là 1 cái hộp có chứa data, có 1 mũi tên lúc nào cũng chỉ đến cái hộp đó, mũi tên đó là Pointer