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++实现list类(第一次用类) —— new对象需delete

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

effective c++ 条款13,16(以对象管理资源,成对使用new delete的形式相同)

问题如下: 省略号部分可能出现return语句,所以后面的delete可能不被执行,导致内存泄漏。 解决方案:使用智能指针令其自动释放资源,或者将释放功能放在析构函数中 auto_ptr ...

C++对C语言的非面向对象特性扩充(3)--作用域运算符"::"&强制类型转换&运算符new和delete&引用

1.作用域运算符“::”     如果有两个同名变量,一个是全局的,一个是局部的,那么局部的变量在其作用域拥有较高的优先权,全局变量则被屏蔽。     那如果我希望在局部变量的作用域里使用全局变量...

DLL中New和外部Delete以及跨DLL传递对象的问题

不同的DLL中完全可能会维护不同的局部堆,这与编译器的实现有关。有些编译器可以选择使用进程共享的局部堆,但性能会受影响。      如果是不同的局部堆,当你在DLL中new时,是在DLL的堆中分...

C++_new_和_delete的整理资料

  • 2012年11月18日 12:49
  • 53KB
  • 下载

c++基础介绍,如delete ,new

  • 2010年01月17日 14:15
  • 907KB
  • 下载

C++学习:动态内存分配对象的new/delete运算符与函数malloc/free

C++学习:对象的new/delete运算符与函数malloc/free摘要: 在学习java的时候,都是使用new来创建新的对象的,对象的存放在堆里的.而回收是由java虚拟机garbag...

c++语言,new和delete

  • 2011年11月11日 19:55
  • 839KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++之对象的new与delete
举报原因:
原因补充:

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