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

news/2024/7/8 0:58:42 标签: c++, 指针

文章目录

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


http://www.niftyadmin.cn/n/5535971.html

相关文章

xml_woarchive undefined symbol

最近在linux中编译一个自己写的老代码。是个C动态库。可以编译成功,但直到运行的时候才报 boost xml_woarchive undefined symbol. 解决的方法是在编译时要加上 wserialization 库。 注意,这个库有含 w 和不含 w 两个。在我这里需要使用含 w 的。 如果…

Rethinking Federated Learning with Domain Shift: A Prototype View

CVPR2023,针对分布式数据来自不同的域时,私有模型在其他域上表现出退化性能(具有域转移)的问题。提出用于域转移下联邦学习的联邦原型学习(FPL)。核心思想是构建集群原型和无偏原型,提供富有成效的领域知识和公平的收敛目标。将样本嵌入拉近到属于相同语义的集群原型,而…

8人团队历时半年打造开源版GPT-4o,零延迟演示引爆全网!人人可免费使用!

目录 01 Moshi 02 背后技术揭秘 GPT-4o可能要等到今年秋季才会公开。 然而,由法国8人团队开发的原生多模态Moshi,已经达到了接近GPT-4o的水平,现场演示几乎没有延迟,吸引了大量AI专家的关注。 令人惊讶的是,开源版的…

基于惯性加权PSO优化的目标函数最小值求解matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于惯性加权PSO优化的目标函数最小值求解matlab仿真。 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 (完整程序运行后无水印)…

【C++】 C/C++预处理器介绍

C预处理器(Preprocessor)是编译过程中的一个阶段,它在编译器进行实际编译之前对源代码进行处理。预处理器提供了一系列的指令,用于条件编译、文件包含、宏定义等操作。以下是一些常见的预处理器指令: 宏定义&#xff…

LLMs:《Rethinking open source generative AI open-washing and the EU AI Act》翻译与解读

LLMs:《Rethinking open source generative AI open-washing and the EU AI Act》翻译与解读 导读:这篇文章阐述了开放源码生成式人工智能(generative AI)模型的一个新方式,并提出了一个开放度评估框架。 背景:去年众多语言模型开…

react+ts+antd项目搭建

前言: 基于ts语言创建react项目,node版本是v16.14.2 一、 脚手架创建项目 全局安装 npm install -g creacte-react-app创建项目file-management,ts需要添加–template typescript npx create-react-app file-management --template typesc…

强强联合:Apache Kylin与Impala的集成之道

🔗 强强联合:Apache Kylin与Impala的集成之道 在大数据时代,Apache Kylin和Impala都是分析型数据库的佼佼者,分别以预计算的OLAP引擎和高性能的SQL on Hadoop解决方案而闻名。将两者集成,可以充分利用Kylin的预计算能…