美文网首页
c++ new用法

c++ new用法

作者: 海角hust | 来源:发表于2020-05-07 21:22 被阅读0次

本文关于c++的基础用法和高级用法

1.基础用法

int *a = new int[5];
class A {...}   //声明一个类 A
A *obj = new A();  //使用 new 创建对象
delete []a;
delete obj;

new A()进行了如下操作:
(1) 在堆上分配了存储空间
(2) 调用A的构造函数(这是与malloc的主要区别,malloc只分配空间,没有调用构造函数)

delete obj的时候,调用A的析构函数,并释放存储空间,这也是与free的主要区别

2.operator new

C++ 规定 new 的 这 两个功能分开实现
(1)分配空间: 调用函数 operator new 来实现。
(2)调用构造函数: 调用 placement new 来实现。
这三个 new ,第一个new就是我们常说的new,这个new调用接下来的两个new来实现它的功能。 (这个 new 为 new operator)

new关键字会调用 operator new 分配空间: 这里 operator new 是一个全局的函数,写在一个文件中。当使用 new 关键字 的时候,编译器会自动找到这个函数,并且调用这个函数:这个函数的声明如下:

// 全局 operator new
void * operator new(std::size_t size) throw(std::bad_alloc) {
    if (size == 0)
        size = 1;
    void* p;
    while ((p = ::malloc(size)) == 0) { //采用 malloc 分配空间
        std::new_handler nh = std::get_new_handler();
        if (nh)
            nh();
        else
            throw std::bad_alloc();
    }
    return p;
}
// 对应的全局 operator delete 采用 free 释放空间
void operator delete(void* ptr) {
    if (ptr)
        ::free(ptr); //采用 free 释放空间。
}

operator new分配了相关的存储空间,类似与malloc,需要调用构造函数创建对象,就需要placement new

3.placement new

placement new的功能就是调用构造函数,创建对象

class A {...}  //声明一个 类 A
void *buf =  malloc(sizeof(A));   //简单地分配空间。
A *ojb = new (buf)A();    // 在分配的空间上调用构造函数。

“已经分配好的空间” 可以是任何的空间,比如说 可以是栈上的空间!

class A {int a;}
int buf[sizeof(A)];   //在栈上,分配一个数组
A *obj =  new(buf) A();  //在这个数组上构造一个 对象 A。

相关文章

  • c++ new用法

    本文关于c++的基础用法和高级用法 1.基础用法 new A()进行了如下操作:(1) 在堆上分配了存储空间(2)...

  • c++ new的用法

    new int;//开辟一个存放整数的存储空间,返回一个指向该存储空间的地址(即指针) new int(100);...

  • 2017-03-14 C++阶段

    Task List 1. 回顾引用用法 2. 掌握c++中 new开辟空间的用法 3. 回顾数组指针以及const...

  • JS 里的数组

    数组用法 在说数组的用法前先研究下string的用法和加new的用法 由此可见,直接使用和new的区别是:没有ne...

  • 使用giflib库加载gif图片

    1、创建c++工程 通过 file -> new -> new project,创建一个新的c++工程。 2、配置...

  • 关于C++不了解的那些事

    关于C++不了解的那些事 new & delete C++类实例化的两种方式:new和不new的区别 - Zope...

  • 2018年9月5日.NET笔试面试题

    new 有几种用法?new Class();覆盖方法 public new XXXX(){}new 约束指定泛型类...

  • C++内存

    认识C++内存 operator new, operator delete和new, delete operato...

  • C++ ofstream和ifstream详细用法

    C++ ofstream和ifstream详细用法

  • 第3篇-C/C++ 类和内存分配(中)

    我们已经从前面一篇《第3篇-C/C++ 类和内存分配(前)》的一些详细例子了解到new操作符的基本用法。 那么,我...

网友评论

      本文标题:c++ new用法

      本文链接:https://www.haomeiwen.com/subject/cavzghtx.html