• 如果您想对本站表示支持,请随手点击一下广告即可~
  • 本站致力于提供原创、优秀的技术文章~
  • 有任何疑问或建议 均可以在站点右侧栏处 通过各种方式联系站长哦~
  • C++之new的几种用法

    C/C++ EXP 102阅读 0评论

    运算符new

    new最常的用法是作为运算符,这时候new会在堆上分配一块内存,并会自动调用类的构造函数,如:

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


    函数new

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

    new函数返回的是一个void指针,指向一块未经初始化的内存。

    可以发现,这和C语言的malloc行为相似,所以你可以重载new函数,并且增加额外的参数,但是必须保证第一个参数必须是size_t类型,它指明了分配内存块的大小。

    如果重载了new函数,在使用new操作符时调用的就是你重载后的new函数了。

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


    placement new

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

    先看看下面的代码:

    结果为:

    可以看到placement new 并没有分配新的内存,也可以使用在栈上分配的内存,而不限于堆。为了使用placement new 你必须 #include <new> 或 #include <new.h>。

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

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

    和new对应的就是delete了


    总结

    ① 函数new:

    如果你已经有一块内存,placement new会非常有用,事实上,它STL中有着广泛的使用。

    ② 运算符new: 最常用的new,没什么可说的。

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

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

    ⑤ new对应的是delete。


    转载请注明:EXP 技术分享博客 » C++之new的几种用法

    喜欢 (1) 分享 (0)
    发表我的评论
    取消评论

    表情

    Hi,您需要填写昵称和邮箱!

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址