C++之对象的new与delete

原创 2016年05月31日 20:17:51

这里单独说一点对于类对象的new和delete中到底开辟的是哪段空间,释放的是哪段空间。
还是一样举个例子:

class A{
private:
    char* str;
public:
    A(){
        str = new char[100];    
    }
    ~A(){
        delete []str;
    }
};

int main(){
    A a = new A;
    delete a;
}

构造器和析构器就不用说了,显然构造器中的new是为str开辟了一段100字节空间,析构器中delete释放的也是为str的那100字节大小的空间。那么main函数中new呢?
其实也很容易看出来,是为对象a创建的空间,一般情形下,使用

A a;

这种情况下是看不到编译器给对象a分配空间的,通过:

A a = new A;

就能显示的看到为a分配空间,但这个过程单纯就是为对象开辟空间,并不去为a.str开辟空间,但为什么a.str的空间确确实实被开辟了呢,因为new A这个过程引发了构造器,再由构造器为a.str开辟空间。

delete是一个道理,显然delete a; 释放了为对象开辟的空间,但在释放对象的空间之前引发了析构器,由析构器先释放a.str的空间,最后再释放对象a的空间。

版权声明:本文为博主原创文章,未经博主允许不得转载。

【C++】 深入探究 new 和 delete

在C++中,我们应该经常会用到new、delete,它们是C++的一个关键字,同时也是一个操作符,下面我将我对这两者的了解和学习做一个总结和探讨。new和delete的全过程首先我们定义一个对象A: ...
  • codedoctor
  • codedoctor
  • 2017年07月27日 14:29
  • 584

new和delete 基类指针指向继承类的对象时,delete的过程

释放指向派生类对象的基类指针
  • qq_33317320
  • qq_33317320
  • 2016年05月21日 15:55
  • 1468

C++的new 和 delete 操作符重载。

测试代码: // test.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include using name...
  • chjjunking
  • chjjunking
  • 2014年03月04日 12:16
  • 2757

c++实现list类(第一次用类) —— new对象需delete

一:起因 (1)拿出自己年初实现的list,第一次用c++类实现list或者说第一次写一个工程上用到的list类,在和如今实现的list对比,心情无比复杂; (2)说明了一点,我也曾经幼稚过,现在还...
  • u010700335
  • u010700335
  • 2014年11月22日 10:37
  • 2057

C++类和new、delete操作符和堆和栈内存的分配

如果你是Java、C#、PHP程序员,那么会对 new 非常熟悉,在这些编程语言中,只能通过 new 来创建对象。 在C++中,你可以像定义变量一样来创建对象,如: Student stu...
  • u011068702
  • u011068702
  • 2016年07月24日 01:28
  • 783

如何delete vector中new出来的内存

delete vector内存
  • gcq1992
  • gcq1992
  • 2017年04月13日 16:13
  • 751

c++: 是否会自动delete?

一直以来对于C++内存管理部分存在一些小疑问,尤其是涉及到内存泄漏的知识,我觉得还是有必要提出来,以加深印象。问题1:new了一块内存,一定要手动delete吗?什么时候系统会自动帮助我们delete...
  • VitaLemon__
  • VitaLemon__
  • 2017年03月01日 16:57
  • 600

c++ 的用 new 和delete 进行二维数组动态内存的创建和删除

1.数组指针 A (*ga)[n] = new A[m][n]; ... delete []ga; 2.二级指针 A** ga = new A*[m]; for...
  • xiaolonggezte
  • xiaolonggezte
  • 2017年03月06日 15:02
  • 384

C++开发DLL中使用new和delete注意事项

报错情况: 1,在 DLL 中用 new 来创建宿主程序中的对象,然后把这个对象指针保存到宿主程序,当 DLL 被卸载后,凡是涉及到这个指针的调用都会报错,包括 delete 这个指针也会有错。 ...
  • dodott
  • dodott
  • 2016年11月11日 18:26
  • 1125

c++详解【new和delete】

说起new和delete,了解过c++的人应该都知道吧,它是用来分配内存和释放内存的两个操作符。与c语言中的malloc和free类似。 c语言中使用malloc/calloc/realloc/fr...
  • xxpresent
  • xxpresent
  • 2016年11月21日 09:22
  • 1624
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++之对象的new与delete
举报原因:
原因补充:

(最多只允许输入30个字)