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

指针分配与释放 :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

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值