iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++ new用法是怎么样的
  • 272
分享到

C++ new用法是怎么样的

2023-06-17 16:06:45 272人浏览 薄情痞子
摘要

今天就跟大家聊聊有关c++ new用法是怎么样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C++编程语言中有一种叫做new的术语。不过这一概念是比较模糊的,有些人把它理解为new

今天就跟大家聊聊有关c++ new用法是怎么样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

C++编程语言中有一种叫做new的术语。不过这一概念是比较模糊的,有些人把它理解为new函数,但是有的人又会把它理解为new运算符。那么它的真正含义又是如何的呢?

C++ new用法之一 new运算符

最常用的是作为运算符的new,比如:

string *str = new string(“test new”);

作为运算符,new和sizeof一样,是C++内置的,你不能对它做任何的改变,除了使用它。

new会在堆上分配一块内存,并会自动调用类的构造函数。

C++ new用法之二 new函数

第二种就是new函数,其实new运算符内部分配内存使用的就是new函数,原型是:

void *operator new(size_t size);

new函数返回的是一个void指针,一块未经初始化的内存。如你所见,这和C语言的malloc行为相似,你可以重载new函数,并且增加额外的参数,但是必须保证***个参数必须是size_t类型,它指明了分配内存块的大小,C++允许你这么做,当然一般情况下这是不必要的。如果重载了new函数,在使用new操作符时调用的就是你重载后的new函数了。

如果使用new函数,和语句string *str = new string(“test new”)相对的代码大概是如下的样子:

string *str = (string*)operator new(sizeof(string));  str.string(“test new”);   // 当然这个调用时非法的,但是编译器是没有这个限制的

这还不算完,还有第三种的new存在。

C++ new用法之三 placement new

第三种,placement new,这也是new作为函数的一种用法,它允许你在一块已存在的内存上分配一个对象,而内存上的数据不会被覆盖或者被你主动改写,placement new同样由new操作符调用,调用格式是:

new (buffer) type(size_t size);

先看看下面的代码:

char str[22];  int data = 123;  int *pa = new (&data) int;  int *pb = new (str) int(9);

结果*pa = 123(未覆盖原数据),而*pb = 9(覆盖原数据),可以看到placement new 并没有分配新的内存,也可以使用在栈上分配的内存,而不限于堆。

为了使用placement new 你必须包含<new>或者<new.h>

其实placement new和第二种一样,只不过多了参数,是函数new的重载,语法格式为:

void *operator new(size_t, void* buffer);

它看起来可能是这个样子:

void *operator new(size_t, void* buffer) { return buffer;}

和new对应的就是delete了,需要回收内存啊,不然就泄漏了,这个下次再写吧,回忆一下今天的内容先。

总结

函数new

void *operator new(size_t size); 在堆上分配一块内存,和placement new(void *operator new(size_t, void* buffer)); 在一块已经存在的内存上创建对象,如果你已经有一块内存,placement new会非常有用,事实上,它STL中有着广泛的使用。

运算符new

最常用的new,没什么可说的。

函数new不会自动调用类的构造函数,因为它对分配的内存类型一无所知;而运算符new会自动调用类的构造函数。

函数new允许重载,而运算符new不能被重载。

紧接着就是对应的delete。

看完上述内容,你们对C++ new用法是怎么样的有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网其他教程频道,感谢大家的支持。

--结束END--

本文标题: C++ new用法是怎么样的

本文链接: https://www.lsjlt.com/news/290969.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++ new用法是怎么样的
    今天就跟大家聊聊有关C++ new用法是怎么样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C++编程语言中有一种叫做new的术语。不过这一概念是比较模糊的,有些人把它理解为new...
    99+
    2023-06-17
  • c++中的new的用法
    c++ 中 new 运算符用于动态内存分配,从堆内存分配指定大小的内存并返回指向分配内存的指针。使用方法包括:1. 分配内存:使用 new 运算符分配所需大小的内存;2. 访问分配的内存...
    99+
    2024-04-26
    c++
  • c++中的new和delete怎么用
    小编给大家分享一下c++中的new和delete怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!new expressionnew一个类型,会创建一个该类型的...
    99+
    2023-06-22
  • C# 中new()约束的作用是什么
    C# 中new()约束的作用是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。对于C# new()约束,大家可能有一个误解,以为使用了C# new约束之后,在创建对象时与...
    99+
    2023-06-17
  • C++中new的用法及说明
    目录C++ new的用法知识点小结new的三种使用方法概念示例C++ new的用法 知识点小结 new其实就是告诉计算机开辟一段新的空间,但是和一般的声明不同的是,new开辟的空间在...
    99+
    2022-11-13
    C++中new new的用法 C++ new用法
  • Java中new hashmap的用法是什么
    在Java中,使用new HashMap<>()可以实例化一个新的HashMap对象,可以用来存储键值对数据。HashM...
    99+
    2024-03-02
    Java
  • C#中new修饰符的作用是什么
    C#中new修饰符的作用是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。C# new修饰符是起什么作用?◆C# new修饰符与 new 操作符是两个概念;◆C# new...
    99+
    2023-06-17
  • C#中 New关键字的作用是什么
    C#中 New关键字的作用是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、在C#中,new这个关键字使用频率非常高,主要有3个功能:1)作为运算符用来创建一个对象和调用...
    99+
    2023-06-17
  • c++中new和delete怎么使用
    在C++中,new和delete是用来动态分配和释放内存的操作符。1. 使用new操作符动态分配内存:```int* p = new...
    99+
    2023-09-27
    c++
  • c++中new的作用
    c++ 中 new 运算符用于动态分配内存,包括:分配指定大小的内存块、创建堆内存中的对象以及返回指向分配内存块的指针,语法为 type* ptr = new type;。 C++ 中...
    99+
    2024-04-26
    c++
  • c#中new的作用
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-15
  • C#中 new和override的区别是什么
    本篇文章为大家展示了C#中 new和override的区别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。override是指“覆盖”,是指子类覆盖了父类的方法。子类的对象无法再访问父类中的该方...
    99+
    2023-06-17
  • c++中new char是什么意思
    new char 运算符在 c++ 中用于动态分配一个字符,返回指向新分配内存单元的指针,语法为 char* new_char = new char;。用途包括创建字符变量、字符数组和向...
    99+
    2024-04-26
    c++
  • C++中的opeartor new和placement new使用步骤
    目录new做了哪些:opeartor new重载测试placement newPlacement new使用步骤总结:参考文章:new做了哪些: 在c++中,对new的调用时,new...
    99+
    2022-11-13
    C++ opeartor new C++ placement new
  • js中new set()使用的方法是什么
    在JavaScript中,可以使用以下方法来使用`new Set()`:1. 创建一个空的Set对象:```javascriptco...
    99+
    2023-09-29
    js
  • c++中new的三种用法详细解析
    一. 简介new有三种使用方式:plain new,nothrow new和placement new。(1)plain new顾名思义就是普通的new,就是我们惯常使用的new。在...
    99+
    2022-11-15
    new c++
  • C++中new类型的运算符怎么使用
    这篇文章主要介绍“C++中new类型的运算符怎么使用”,在日常操作中,相信很多人在C++中new类型的运算符怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++中new类型的运算符怎么使用”的疑惑有所...
    99+
    2023-06-29
  • javascript中new方法怎么使用
    这篇文章主要介绍“javascript中new方法怎么使用”,在日常操作中,相信很多人在javascript中new方法怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • C# 程序通用结构是怎么样的
    这篇文章主要介绍了C# 程序通用结构是怎么样的,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。C# 程序由一个或多个文件组成。 每个文件均包含零个或多个命名空间。 一...
    99+
    2023-06-22
  • C#语法浮点型字面量是怎么样的
    这篇文章主要介绍了C#语法浮点型字面量是怎么样的,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。C#语法浮点型字面量小数是生活中经常使用的一种数据表示形式。我们日常使用的5.5...
    99+
    2023-06-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作