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的空间。

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

相关文章推荐

堆对象的new与delete

直接贴代码: //堆对象正确使用范例---1 #include #include using namespace std; class A { public: A(){} A...

C++中new、delete 与new[]、delete[]

在C++中,申请堆内存,使用new或者new[],在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。 关于...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

C++中的new/delete与operator new/operator delete

原文:http://www.cnblogs.com/luxiaoxun/archive/2012/08/10/2631812.html C++中的new/delete与operator new/...

C++中的new/delete与operator new/operator delete

new operator/delete operator就是new和delete操作符,而operator new/operator delete是函数。 new operator (1)调用op...

c++之new, delete

Dynamic memory alloatenew Allocate memory call constructor delete call destructor free memory 两种方式: ...

C++ new delete new[] delete[]

C++不支持类专属的new-handler,类需要自定义operator new和set_new_handler静态成员函数来使用其专属的new-handler。 throwing (1)v...

C++之new、delete 与malloc、free

在C/C++编程中经常会申请内存,而对内存的申请释放操作有两套方法: new、delete 与malloc、free。1. 区别(1). new、delete是c++中的操作符,malloc、fre...

对new, delete, delete[]的理解

1. 当你使用new时,有两件事会发生。第一,内存被配置(透过函数operator new)。第二,会有一个(或以上)的constructors针对此内存被调用。当你使用delete时,也有两件事发生...

C++中的new/delete和new[]/delete[]

引子 C++的new/delete C++的new[]/delete[] C++的new/delete当我们使用一条new表达式时:// new表达式 string *sp = new string(...

浅谈 C++ 中的 new/delete 和 new[]/delete[]

浅谈 C++ 中的 new/delete 和 new[]/delete[] 在 C++ 中,你也许经常使用 new 和 delete 来动态申请和释放内存,但你可曾想过以下问题呢? n...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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