Quản lý bộ nhớ trong C++ – Phần 13

Đăng ngày: 20/06/2026 • Tác giả: Quản trị viên
Quản lý bộ nhớ trong C++ – Phần 13

Quản lý bộ nhớ trong C++

1. Giới thiệu

Trong C++, bộ nhớ được chia thành hai vùng chính: Stack và Heap. Việc quản lý bộ nhớ hiệu quả giúp tránh rò rỉ bộ nhớ và tối ưu hóa hiệu suất.

2. Bộ nhớ Stack và Heap

  • Stack: Quản lý tự động, chứa biến cục bộ và lời gọi hàm.
  • Heap: Cấp phát động, quản lý thủ công bằng new và delete.

3. Cấp phát động với new và delete

int* p = new int(10); // Cấp phát động
cout << *p;           // In ra giá trị 10
delete p;            // Giải phóng bộ nhớ

Cấp phát động cho mảng:

int* arr = new int[5];
for (int i = 0; i < 5; i++) arr[i] = i * 2;
delete[] arr; // Giải phóng bộ nhớ

4. Smart Pointers (Con trỏ thông minh)

Smart pointers (unique_ptr, shared_ptr, weak_ptr) trong thư viện <memory> giúp tự động giải phóng bộ nhớ.

4.1. unique_ptr

#include <memory>
unique_ptr<int> uptr = make_unique<int>(20);
cout << *uptr;

4.2. shared_ptr

#include <memory>
shared_ptr<int> sp1 = make_shared<int>(30);
shared_ptr<int> sp2 = sp1; // Chia sẻ quyền sở hữu
cout << *sp1;

5. Rò rỉ bộ nhớ và cách khắc phục

Rò rỉ bộ nhớ xảy ra khi cấp phát động mà không giải phóng.

void func() {
    int* ptr = new int(100); // Không có delete → Rò rỉ bộ nhớ
}

Cách khắc phục: Dùng smart pointers hoặc đảm bảo giải phóng bằng delete.

6. Kết luận

Quản lý bộ nhớ hiệu quả giúp tối ưu chương trình và tránh lỗi. Trong bài tiếp theo, chúng ta sẽ tìm hiểu về nhập xuất tệp trong C++.

Bài viết liên quan