一、使用new关键字新建单个对象管理动态内存
class Person {
public:
Person() {
cout << "Person object created!" << endl;
}
~Person() {
cout << "Person object destroyed!" << endl;
}
};
int main() {
Person* p = new Person(); // 使用new关键字创建Person对象
// 使用p指针访问Person对象的成员函数和成员变量
delete p; // 删除使用new创建的对象
return 0;
}
使用new关键字来动态分配内存空间,可以根据当前程序的需求大小灵活分配,在程序运行时根据需要释放已经使用的资源。但是在使用完动态内存后,一定要使用delete关键字来释放已经使用的资源,否则会导致内存泄漏。
二、使用new关键字新建数组管理动态内存
class Person {
public:
Person() {
cout << "Person object created!" << endl;
}
~Person() {
cout << "Person object destroyed!" << endl;
}
};
int main() {
Person* p = new Person[5]; // 使用new关键字创建Person对象的数组
// 使用p指针访问Person对象数组的成员函数和成员变量
delete[] p; // 删除使用new创建的对象数组
return 0;
}
在使用new来创建数组管理动态内存时,需要使用delete[]来释放动态分配的内存,因为使用new来创建数组而没有使用delete[]来释放内存会导致内存泄漏。
三、使用智能指针管理动态内存
#include
class Person {
public:
Person() {
cout << "Person object created!" << endl;
}
~Person() {
cout << "Person object destroyed!" << endl;
}
};
int main() {
shared_ptr p = make_shared(); // 使用make_shared函数创建智能指针
// 使用p指针访问Person对象的成员函数和成员变量
return 0; // 函数结束时智能指针会自动释放内存
}
智能指针可以自动释放内存空间,在指针对象生命周期结束时自动调用析构函数。C++11的标准库中提供了两种智能指针,shared_ptr和unique_ptr。shared_ptr和unique_ptr的区别在于,shared_ptr可以和多个指针共享同一个对象,而unique_ptr则只能指向一个对象。
四、使用RAII技术实现动态内存管理
class Resource {
public:
Resource() {
cout << "Resource acquired!" << endl;
}
~Resource() {
cout << "Resource released!" << endl;
}
};
class RAII {
public:
RAII() {
pResource = new Resource();
}
~RAII() {
delete pResource;
}
private:
Resource* pResource;
};
void func() {
RAII obj; // 在RAII对象构造时申请资源,在RAII对象析构时释放资源
}
int main() {
func(); // func函数执行结束后,RAII对象会自动释放资源
return 0;
}
RAII(Resource Acquisition Is Initialization)技术是一种常用的动态内存管理技术,RAII对象用于在其构造函数中申请资源,在其析构函数中释放资源。使用RAII技术可以避免动态内存管理错误和内存泄漏。
五、使用容器管理动态内存
#include
class Person {
public:
Person() {
cout << "Person object created!" << endl;
}
~Person() {
cout << "Person object destroyed!" << endl;
}
};
int main() {
vector v; // 使用vector容器管理Person对象
v.push_back(Person()); // 在vector中添加Person对象
return 0; // 函数结束时vector容器会自动释放内存
}
C++标准库提供了多种容器类来管理动态内存,vector是其中一种容器,它可以自动管理内存并为程序员提供简单的语法来添加、删除、访问元素。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/158045.html
微信扫一扫
支付宝扫一扫