Đoạn mã sau tạo một đối tượng trên stack:Tạo đối tượng trên ngăn xếp/heap?
Object o;
Khi tạo một đối tượng trên heap chúng ta có thể sử dụng:
Object* o;
o = new Object();
hơn:
Object* o = new Object();
Khi chúng tôi chia tay tạo đối tượng đống trên hai dòng và gọi hàm tạo trên dòng thứ hai (o = new object()
), điều này có nghĩa là trong dòng đầu tiên ()) con trỏ đã được tạo trên ngăn xếp? Vì vậy, Object o
đặt đối tượng trên ngăn xếp, trong khi Object* o
đặt con trỏ đến một đối tượng trong tương lai trên ngăn xếp?
Câu hỏi thứ hai của tôi bao gồm nếu hai dòng mã được gọi bên ngoài một lớp. Gần đây tôi đã đọc (Global memory management in C in stack or heap?) rằng các biến toàn cầu không được chứa trên ngăn xếp/đống nhưng thực sự là một phần khác của bộ nhớ? Nếu đây là trường hợp, sẽ Object* o
tạo một con trỏ sẽ nằm trong phần khác của bộ nhớ và nó trỏ đến đối tượng heap?
Hai người đó sẽ * có thể * tối ưu hóa cho cùng một điều, tôi nghĩ vậy. – Ryan
_pointer_ luôn được tạo trên ngăn xếp. – leftaroundabout
Tôi sẽ đứng thứ hai @leftaroundabout, và đi xa hơn: tất cả các biến được khai báo trong một khối được tạo trên ngăn xếp; toàn bộ đối tượng cho ví dụ đầu tiên và con trỏ tới đối tượng trong đối tượng thứ hai. –