c++棧內存和堆內存的基本使用
#include <iostream>// 定義一個簡單的結構體
struct Person {std::string name;int age;
};int main() {// 棧內存分配int a = 10; // 基本數據類型的棧內存分配Person person; // 結構體的棧內存分配person.name = "John";person.age = 30;std::cout << "Stack memory usage:" << std::endl;std::cout << "a = " << a << std::endl;std::cout << "Person name: " << person.name << ", age: " << person.age << std::endl;// 堆內存分配int* p = new int; // 基本數據類型的堆內存分配*p = 20;Person* personPtr = new Person; // 結構體的堆內存分配personPtr->name = "Alice";personPtr->age = 25;std::cout << "Heap memory usage:" << std::endl;std::cout << "*p = " << *p << std::endl;std::cout << "PersonPtr name: " << personPtr->name << ", age: " << personPtr->age << std::endl;// 釋放堆內存delete p;delete personPtr;return 0;
}
動態數組的使用和內存管理
#include <iostream>int main() {// 動態數組的堆內存分配int size = 5;int* array = new int[size];// 初始化數組for (int i = 0; i < size; ++i) {array[i] = i * 10;}// 打印數組std::cout << "Dynamic array:" << std::endl;for (int i = 0; i < size; ++i) {std::cout << "array[" << i << "] = " << array[i] << std::endl;}// 釋放堆內存delete[] array;return 0;
}
內存泄漏示例及其解決方案
#include <iostream>void memoryLeakExample() {int* leakArray = new int[100]; // 這個數組沒有被釋放,造成內存泄漏// 正確的處理方式delete[] leakArray;
}int main() {// 調用內存泄漏示例memoryLeakExample();return 0;
}
智能指針的使用
C++11引入了智能指針,可以自動管理內存,避免內存泄漏。
#include <iostream>
#include <memory> // 需要包含這個頭文件class MyClass {
public:MyClass() {std::cout << "Constructor called" << std::endl;}~MyClass() {std::cout << "Destructor called" << std::endl;}void display() {std::cout << "Display method called" << std::endl;}
};int main() {// 使用unique_ptrstd::unique_ptr<MyClass> ptr1(new MyClass());ptr1->display();// 使用shared_ptrstd::shared_ptr<MyClass> ptr2 = std::make_shared<MyClass>();ptr2->display();return 0;
}