Trong C++, đối tượng có thể tạo trên stack (không dùng new) hoặc heap (dùng new).
So sánh
| Đặc điểm | Không dùng new (Stack) | Dùng new (Heap) |
|---|---|---|
| Cú pháp | Class obj; | Class* ptr = new Class(); |
| Vùng nhớ | Stack | Heap |
| Thời gian sống | Tự hủy khi ra khỏi scope | Cần delete thủ công |
| Truy cập | Toán tử . | Toán tử -> |
| Kích thước | Giới hạn stack size | Linh hoạt, lớn hơn |
Ví dụ mã nguồn
#include <iostream>
using namespace std;
class Point {
int x, y, z;
public:
Point(int x, int y, int z) : x(x), y(y), z(z) {}
void display() { cout << "(" << x << ", " << y << ", " << z << ")\n"; }
};
int main() {
// Stack object
Point p1(10, 15, 20);
p1.display();
// Heap object
Point* ptr = new Point(50, 60, 70);
ptr->display();
delete ptr; // Quan trọng: giải phóng bộ nhớ
return 0;
}
Đầu ra
(10, 15, 20) (50, 60, 70)
Lưu ý quan trọng
Luôn nhớ delete con trỏ được cấp phát bằng new để tránh rò rỉ bộ nhớ. C++11 khuyến nghị dùng smart pointers (unique_ptr, shared_ptr).