C++中,对象的动态内存分配允许在程序运行时创建对象,并将这些对象存储在堆(heap)上,而不是栈(stack)上。通过new
操作符实现,该操作符不仅为对象分配内存,还调用对象的构造函数来初始化内存。使用delete
操作符来释放对象所占用的内存,并调用对象的析构函数清理资源。
动态分配单个对象:
#include <iostream>
class MyClass {
public:
MyClass(int x) : value(x) {} // 构造函数
~MyClass() { std::cout << "Destructor called\n"; } // 析构函数
void print() { std::cout << "Value: " << value << std::endl; }
private:
int value;
};
int main() {
// 动态分配 MyClass 对象
MyClass* myObject = new MyClass(10);
// 使用对象
myObject->print();
// 释放对象所占用的内存
delete myObject;
// 此时,myObject 成为了野指针,应将其设置为 nullptr
myObject = nullptr;
return 0;
}
动态分配对象数组:
<iostream>
class MyClass {
public:
MyClass(int x) : value(x) {}
void print() { std::cout << "Value: " << value << std::endl; }
private:
int value;
};
int main() {
// 动态分配 MyClass 对象的数组
MyClass* myObjects = new MyClass[3]{1, 2, 3};
// 使用数组中的对象
for (int i = 0; i < 3; ++i) {
myObjects[i].print();
}
// 释放数组所占用的内存
delete[] myObjects;
// 将指针设置为 nullptr
myObjects = nullptr;
return 0;
}