当前位置: 首页> 健康> 美食 > C++指针内存分配与释放

C++指针内存分配与释放

时间:2025/8/10 7:05:11来源:https://blog.csdn.net/qq_21980099/article/details/140164864 浏览次数:0次

文章目录

  • 指针分配与释放 :C++ new/delete VS C malloc/free
    • C++ new/delete
    • C malloc/free
  • 指针销毁
  • 智能指针

指针分配与释放 :C++ new/delete VS C malloc/free

new:分配内存、调用类的构造函数。delete:调用类的析构函数和释放内存(先调用对象的析构函数,然后利用全局的operator delete(一般通过std::free实现)函数释放内存,并不会将指针自动置空。
mallocfree只是分配和释放内存。

new建立的是一个对象,而malloc分配的是一块内存
new建立的对象可以用成员函数访问不要直接访问它的地址空间malloc分配的是一块内存区域,用指针访问,可以在里面移动指针
new出来的指针是带有类型信息的,而malloc返回的是void指针。

C++ new/delete

/* new & delete */
Obj *a = new Obj;
//...
delete a;

C malloc/free

/* malloc & free */
Obj *a = (Obj*)malloc(sizeof(obj));
a->Intialize();
// ...
a->Destroy();
free(a);

malloc/free不能执行构造与析构函数,必须调用成员函数Initialize和Destroy来完成初始化与清除工作。

指针销毁

if (p != NULL)
{delete p;  // 仅删除p中内容,p不为空p == NULL;  // 指针设为空,防止二次delete崩溃
}

int* ,char* 等只要不是new的,不用释放,系统会自动把他们占的内存释放掉,只有new的才会手动的去delete。局部变量,存在于栈上,比如int *p;p在栈上,而且p的值也是栈的一个地址
但是当int *p = new int ;这时候,p这个变量是在栈上的。但是p的值是一个地址,这个地址是堆上的一个地址。如果不delete p;那么,这个地址会一直被占用着,不能被其他的对象所使用。
因此栈的空间会自动释放,而堆里的空间必须手动释放。

智能指针

:指针自动销毁
unique_ptr
shared_ptr
intrusive_ptr

关键字:C++指针内存分配与释放

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: