Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Khác biệt giữa khởi tạo đối tượng C++ có và không có new


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ểmKhông dùng new (Stack)Dùng new (Heap)
Cú phápClass obj;Class* ptr = new Class();
Vùng nhớStackHeap
Thời gian sốngTự hủy khi ra khỏi scopeCần delete thủ công
Truy cậpToán tử .Toán tử ->
Kích thướcGiới hạn stack sizeLinh 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).