一、使用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[]来释放内存会导致内存泄漏。
三、使用智能指针管理动态内存
#includeclass 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技术可以避免动态内存管理错误和内存泄漏。
五、使用容器管理动态内存
#includeclass 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是其中一种容器,它可以自动管理内存并为程序员提供简单的语法来添加、删除、访问元素。