Quản lý bộ nhớ trong C++
1. Giới thiệu
Quản lý bộ nhớ là một phần quan trọng trong lập trình C++. Việc cấp phát và giải phóng bộ nhớ không đúng cách có thể gây ra rò rỉ bộ nhớ và lỗi truy cập bộ nhớ.
2. Cấp phát bộ nhớ động
C++ hỗ trợ cấp phát bộ nhớ động bằng toán tử new và giải phóng bộ nhớ bằng toán tử delete.
2.1. Cấp phát và giải phóng một biến
#include <iostream>
using namespace std;
int main() {
int *ptr = new int; // Cấp phát bộ nhớ động
*ptr = 10;
cout << "Giá trị: " << *ptr << endl;
delete ptr; // Giải phóng bộ nhớ
return 0;
}
2.2. Cấp phát và giải phóng mảng động
#include <iostream>
using namespace std;
int main() {
int *arr = new int[5];
for (int i = 0; i < 5; i++) arr[i] = i * 2;
for (int i = 0; i < 5; i++) cout << arr[i] << " ";
delete[] arr; // Giải phóng bộ nhớ
return 0;
}
3. Smart Pointers
C++11 giới thiệu Smart Pointers để tự động quản lý bộ nhớ, bao gồm unique_ptr, shared_ptr và weak_ptr trong thư viện <memory>.
3.1. unique_ptr
#include <iostream>
#include <memory>
using namespace std;
int main() {
unique_ptr<int> ptr = make_unique<int>(10);
cout << "Giá trị: " << *ptr << endl;
return 0;
}
3.2. shared_ptr
#include <iostream>
#include <memory>
using namespace std;
int main() {
shared_ptr<int> ptr1 = make_shared<int>(20);
shared_ptr<int> ptr2 = ptr1; // Chia sẻ quyền sở hữu
cout << "Giá trị: " << *ptr1 << " - " << *ptr2 << endl;
return 0;
}
3.3. weak_ptr
#include <iostream>
#include <memory>
using namespace std;
int main() {
shared_ptr<int> sp = make_shared<int>(30);
weak_ptr<int> wp = sp; // Không tăng reference count
if (auto spt = wp.lock()) {
cout << "Giá trị: " << *spt << endl;
}
return 0;
}
4. Kết luận
Quản lý bộ nhớ hiệu quả giúp tránh rò rỉ bộ nhớ và tối ưu hiệu suất. Trong bài tiếp theo, chúng ta sẽ tìm hiểu về lập trình hướng đối tượng trong C++.