美文网首页
new AND delete

new AND delete

作者: charlieyan | 来源:发表于2018-01-05 10:28 被阅读0次

转载自 new和detele
和sizeof类似,new 和 delete也不是函数,比如new和c中的malloc函数不同的是,string *ps = new string("hello world");
malloc申请完了之后不会对内存进行必要的初始化,但是new可以。

operator new 和 operator delete

这两个其实是 C++ 语言标准库的库函数,原型分别如下:

void *operator new(size_t); //allocate an object
void *operator delete(void *); //free an object

void *operator new; //allocate an array
void *operator delete[](void *); //free an array

后面两个你可以先不看,后面再介绍。前面两个均是 C++ 标准库函数,你可能会觉得这是函数吗?请不要怀疑,这就是函数!C++ Primer 一书上说这不是重载 new 和 delete 表达式(如 operator= 就是重载 = 操作符),因为 new 和 delete 是不允许重载的。但我还没搞清楚为什么要用 operator new 和 operator delete 来命名,比较费解。我们只要知道它们的意思就可以了,这两个函数和 C 语言中的 malloc 和 free 函数有点像了,都是用来申请和释放内存的,并且 operator new 申请内存之后不对内存进行初始化,直接返回申请内存的指针。
我们可以直接在我们的程序中使用这几个函数。

new 和 delete背后的机制

用一个实例来解释 new 和 delete 背后的机制:

class A
{
public:
 A(int v) : var(v)
  {
    fopen_s(&file, "test", "r");
  }
  ~A()
  {
    fclose(file);
  }

private:
  int var;
  FILE *file;
};

A类中有两个成员var file,一个构造函数一个析构函数,析构函数中初始化私有变量var以及打开一个文件,析构函数关闭打开的文件。
使用语句

class *pA = new A(10);

来创建一个类的对象,返回其指针pA。new背后完成的工作包括:
1.调用operator new标准库函数来分配足够大的原始的未类型化的内存
2.运行该类型的相对应的构造函数。在上一步的内存基础上进行初始化对象。
3.返回指向新分配并构造的对象的指针。

申请和释放一个数组

申请数组可以这样

string &psa = new string[10];
int *pia = new int[10];

释放数组可以使用:

delete [] psa
delete [] pia

在释放数组时[]不可以漏掉。

相关文章

  • new失败抛出异常吗?

    new/delete 在C++中动态分配与释放内存是通过new/delete和new []/delete []实现...

  • C++基础复习与总结

    一、new和malloc的区别1、new和delete配对,释放数组需要用delete[]。new和delete实...

  • C++内存

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

  • new AND delete

    转载自 new和detele和sizeof类似,new 和 delete也不是函数,比如new和c中的malloc...

  • new delete

  • 成员函数、继承(20170213)

    C++06 区分new/delete malloc/free new /delete 运算符,不需要转换,自动...

  • c++ new 和delete的种种

    new/delete动态管理对象,new[]/delete[]动态管理对象数组。 C++中,把int 、char....

  • 2018-05-09

    new delete new delete与malloc free的区别 对于基本数据类型 malloc与free...

  • 面试准备

    C++面试总结 New、Delete和malloc、free的区别? New和Delete自动调用 构造函数 和 ...

  • C++ 细节问题

    1. new, delete和new[], delete[] 会涉及动态空间本配问题 参考文章: http://w...

网友评论

      本文标题:new AND delete

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