21xrx.com
2024-12-22 20:12:30 Sunday
登录
文章检索 我的文章 写文章
C++内存释放方法总结
2023-07-04 11:27:03 深夜i     --     --
C++ 内存释放 方法 总结

C++是一种强大的编程语言,拥有多种内存管理方式来优化程序性能。内存释放是C++编程中一个重要的问题,错误的内存释放方式会导致内存泄漏和程序崩溃。本文将总结C++内存释放的方法。

1. delete操作符

delete操作符用于释放 new 操作符分配的内存。注意:使用delete操作符时,只能与使用new操作符分配的内存对应。

例如:


int* ptr = new int; // 分配int型内存

……

delete ptr; // 释放int型内存

delete操作符还可以用于释放new操作符分配的数组。如:


int* ptr = new int[10]; // 分配包含10个元素的int型数组

……

delete [] ptr; // 释放数组内存

2. delete操作符释放nullptr

删除nullptr不会做任何事情。当我们不确定指针是否为nullptr时,释放nullptr并不会对程序造成任何危害。例如:


int* ptr = nullptr;

……

delete ptr; // 不会对程序造成危害

3. 定位new操作符

定位new操作符是new操作符的变体。它允许我们指定内存的位置。当我们需要在不同的内存位置分配一块内存时,可以使用定位new操作符分配内存。使用定位new操作符,需要自己管理内存释放。例如:


char* buffer = new char[10]; // 分配内存

……

void* ptr = buffer;

……

int* p = new(ptr) int; // 在分配的内存中创建int

……

p->~int(); // 释放内存

delete [] buffer; // 释放内存

4. unique_ptr

unique_ptr是一个独占指针,即只有一个指针可以指向对象,它包含对唯一资源的实现且负责释放该资源。当unique_ptr被销毁或重置时,它所拥有的对象也将被释放。例如:


std::unique_ptr<int> ptr(new int); // 初始化unique_ptr

……

*ptr = 123; // 使用指针

……

ptr.reset(); // 释放内存

5. shared_ptr

shared_ptr可以共享指针拥有的对象,它使用引用计数来管理内存释放。当有多个shared_ptr指向同一对象时,只有最后一个被销毁的shared_ptr会释放指向的对象。例如:


std::shared_ptr<int> ptr1(new int); // 初始化shared_ptr

std::shared_ptr<int> ptr2(ptr1); // 使用拷贝构造函数初始化shared_ptr

……

*ptr1 = 123; // 使用指针

……

ptr1.reset(); // 不会释放内存

ptr2.reset(); // 释放内存

总之,在C++中要正确释放内存,需要仔细考虑每个指针对应的内存,使用合适的内存释放方式,可以避免内存泄漏和程序崩溃。上述总结的方法可以帮助开发者更好地管理内存,优化程序的性能。

  
  
下一篇: C++ Map大小

评论区

{{item['qq_nickname']}}
()
回复
回复