精华内容
下载资源
问答
  • C++ 对象动态建立 & 释放

    千次阅读 2021-05-06 11:31:14
    C++ 对象动态建立 & 释放如何实现以及如何帮助我们提高内存空间的利用率.

    概述

    通过对象的动态建立和释放, 我们可以提高内存空间的利用率.
    在这里插入图片描述

    对象的动态的建立和释放

    new 运算符: 动态地分配内存
    delete 运算符: 释放内存

    当我们用new运算符动态地分配内存后, 将返回一个指向新对象的指针的值. 我们可以通过这个地址来访问对象. 例如:

    int main() {
        
        Time *pt1 = new Time(8, 8, 8);
        pt1 -> show_time();
    
        delete pt1;  // 释放对象
        
        return 0;
    }
    

    输出结果:

    8:8:8
    

    当我们不再需要由 new 建立的对象时, 用 delete 运算符释放.

    案例

    Box 类:

    #ifndef PROJECT1_BOX_H
    #define PROJECT1_BOX_H
    
    class Box {
    public:
        // 成员对象
        double length;
        double width;
        double height;
    
        // 成员函数
        Box();  // 无参构造
        Box(double h, double w, double l);  // 有参有参构造
        ~Box();  // 析构函数
        double volume() const;  // 常成员函数
    };
    
    #endif //PROJECT1_BOX_H
    

    Box.cpp:

    #include <iostream>
    #include "Box.h"
    using namespace std;
    
    Box::Box() : height(-1), width(-1), length(-1) {}
    
    Box::Box(double h, double w, double l) : height(h), width(w), length(l) {
        cout << "========调用构造函数========\n";
    }
    
    double Box::volume() const{
        return (height * width * length);
    }
    
    Box::~Box() {
        cout << "========调用析构函数========\n";
    }
    

    main:

    #include "Box.h"
    #include <iostream>
    using namespace std;
    
    int main() {
    
        Box *pt = new Box(16, 12, 10);  // 创建指针pt指向Box对象
    
        cout << "长:" << pt->length << "\t";
        cout << "宽:" << pt->width << "\t";
        cout << "高:" << pt->height << endl;
        cout << "体积:" << pt->volume() << endl;
    
        delete pt;  // 释放空间
    
        return 0;
    }
    

    输出结果:

    ========调用构造函数========
    长:10   宽:12   高:16
    体积:1920
    ========调用析构函数========
    

    对象数组 vs 指针数组

    对象数组

    固定大小的数组:

    const int N = 100;
    Time t[N];
    

    动态数组:

    const int n = 3;  // 定义数组个数
    Time *pt = new Time[n];  // 定义指针指向数组
    delete []pt;  // 释放空间
    

    在这里插入图片描述

    指针数组

    建立占用空间小的指针数组可以帮助我们灵活处理常用空间大的对象集合. (拿时间换空间)

    举个栗子:

    int main() {
    
        const int n = 3;
        Time *t[n] = {nullptr};
    
        if (t[0] == nullptr){
            t[0] = new Time(8, 8, 8);
        }
    
        if (t[1] == nullptr){
            t[1] = new Time(6, 6, 6);
        }
        
        t[0] -> show_time();
        t[1] -> show_time();
    
        return 0;
    }
    

    在这里插入图片描述

    展开全文
  • SQL Server数据对象结构的动态建立与访问SQL Server数据对象结构的动态建立与访问
  • 对象动态建立和释放

    千次阅读 2017-06-04 14:01:13
    用new建立的对象只能通过指针访问,建立对象时执行构造函数,有时候会出现内存不足,会出现异常。 不再需要由new建立的对象时,用delete运算符释放。否则会造成内存泄漏的情况。在释放内存空间之前,自动调用析...

    new:动态地分配内存

    delet:释放内存

    用new建立的对象只能通过指针访问,建立对象时执行构造函数,有时候会出现内存不足,会出现异常。


    不再需要由new建立的对象时,用delete运算符释放。否则会造成内存泄漏的情况。在释放内存空间之前,自动调用析构函数,完成有关善后清理的工作。也就是说调用delete的时候就会自动调用析构函数。


    建立对象数组和建立指针数组:

    建立对象数组:

    固定大小的数组,通常都是按照系统所需要的最大数量来建立对象数组,所以会造成很大的空间上的浪费;例如:

    const N=100;

    Time t[N];

    动态数组:如下所示。但是,动态数组虽然可以自由指定n,但是也是一下就分配n个对象空间,而如果一时还用不上这么多空间的话,也会造成浪费。

    例如 

            Time *t;

            t=new Time[n];

           delete []t;

    建立指针数组:

    32位系统中一个指针占用4个字节,所以建立占用空间小的指针数组,灵活处理占用空间大的对象集合。例如:

    const int N=100;

    Time *t[N]={NULL};//这个数组中的元素都是指针,每个指针指向Time型对象。初始化所有值为0,也就是NULL

    if (t[i]==NULL)

    t[i]=new Time(10,10,10);

    //当然用这种方式最后还要释放指针所指向的空间,如果指针不为NULL的话。

    if (t[i]!=NULL)

    delete t[i];

    注意指针赋值为NULL,在内存中这个指针变量的值就是0x0。

    用delete释放指针所指向的空间之后,指针变量的值并没有改变,还是那个地址值,但是这个地址所指向的内存空间的值已经被释放了。


    假如执行一次析构函数会输出一个*:

    int main(){
    Sample temp[2],*pTemp[2];

    return 0;

    }

    对于上面的函数,当执行到return的时候,会输出两个*,因为只有temp[2]释放空间的时候会执行析构函数。原因在于temp[2]确实是分配了两个Sample对象的空间,但是*pTime[2]只是分配了两个Sample类型的指针的空间,并没有生成对象。

    展开全文
  • C++对象动态建立和释放

    万次阅读 2016-02-13 17:04:30
    1.1前面的方法是静态的,而在c++中要动态的建立对象可以用new,删除对象用delete。 C++对象动态建立和释放 1.1用new运算符之后,返回一个指向新对象的指针。 Box *pt=new Box(1,2,3); 1.2通过pt来访问这个对象...

    1.1前面的方法是静态的,而在c++中要动态的建立对象可以用new,删除对象用delete。

    C++对象动态建立和释放

    1.1用new运算符之后,返回一个指向新对象的指针。
    Box *pt=new Box(1,2,3);
    1.2通过pt来访问这个对象
    cout << pt->height;
    cout << pt->volume();
    1.3用delete运算符来释放对象。
    delete pt;
    1.4在用delete释放对象前,会调用析构函数,在new建立对象前,会调用构造函数。
    展开全文
  • C++中建立类的对象有两种方式: (1)静态建立,例如 A a;  静态建立一个类对象... 动态建立一个类对象,就是使用new运算符为对象在堆空间中分配内存。这个过程分为两步:第一步执行operator new( )函数,在堆空间
    C++中建立类的对象有两种方式:
    (1)静态建立,例如 A a;
         静态建立一个类对象,就是由编译器为对象在栈空间中分配内存。使用这种方法,是直接调用类的构造函数。
    (2)动态建立,例如 A* p = new A();

         动态建立一个类对象,就是使用new运算符为对象在堆空间中分配内存。这个过程分为两步:第一步执行operator new( )函数,在堆空间中搜索一块内存并进行分配;第二步调用类的构造函数构造对象。这种方法是间接调用类的构造函数。



    在C++语法中,静态对象由于是在STACK上生成,因而比动态生成对象的效率要高,而且不会造成内存泄露。而我发现在实际工作中,一般都是动态生成对象(用NEW),动态生成有什么好处吗?


    原因 1:
    “静态对象由于是在STACK上生成,因而比动态生成对象的效率要高,而且不会造成内存泄露”


      不会造成内存泄露 的原理你应该清楚吧,就是因为在你的对象生存的函数退出时,对象自动析构了。但~~~~~
      如果你的对象要在多个涵数中使用,或者要在一个函数中建立,而在另一个函数中使用(COM 就是用这种方法使用对象的),那你怎么办?当然只能是用 new 的方法了。


    原因 2:
       函数的传址与传值的不同你应该懂吧。
       标明动态对象的是一个指针,标明静态对象的是一个值。当这个对象作为别的函数的参数时,你就知动态对象的作用了。


    另:
       如果你的对象是全局的,那静态,动态也一样:都是在程序退出时析构。都不用关心内存问题。而且动态对象可以在程序未退出进删除,这点要比静态对象强。


    参考讨论:http://bbs.csdn.net/topics/20114330

    展开全文
  • 贺老师的教学链接 本课讲解对象动态建立和释放#include using namespace std; class Box { public: Box(int w,int l,int h); ~Box(); int width; int length; int height; }; Box::Box(int w,int l,int h) {...
  • C++中对象动态创建与释放

    千次阅读 2013-11-28 14:08:48
    前面介绍的方法定义的对象是静态的,在程序运行过程中,对象所占的空间是不能随时释放的。但有时人们希望在需要用到对象时才建立...这也适用于对象,可以用new运算符动态建立对象,用delete运算符撤销对象。 如果已
  • 动态创建对象

    千次阅读 2016-05-06 21:52:16
    在C++程序中建立和删除堆对象使用两个运算符:new和delete. 运算符new的功能是动态分配内存,或者称为动态创建堆对象,语法形式为: new 数据类型(初始化参数列表); 1.如果建立对象是一个基本类型变量,初始...
  • 我们知道可以用new运算符可以动态的分配内存,用delete运算符可以释放这些内存。当我们使用new运算符动态的分配一个内存之后,会自动返回一个该内存段的起始地址,也就是指针。 =============下面先给出一个new和...
  • c++---对象动态建立和释放

    千次阅读 2017-03-03 09:44:59
    —————————————————————————————————————————————————————————— 人生如白驹过隙,爱恨皆可成烟云,名利...软件的开发工程中,经常需要动态的分配和释放
  • C++(20)类对象动态建立和释放

    千次阅读 2018-01-13 01:33:05
    new和delete的用法1)在软件开发过程中,常常需要动态地分配和撤销内存空间,例如对动态链表中结点的插入与删除。在C语言中是利用库函数malloc和free来分配和撤销内存空间的。C++提供了较简便而功能较强的运算符new...
  • 建立动态模型 开发交互式系统,动态模型非常重要 步骤: 编写典型交互行为脚本(依据用例描述) 从脚本中提取事件及相关对象,用顺序图表达 确定对象状态及状态间转换关系,用状态图描绘 结合ATM系统的实例,介绍...
  • C++总结:动态创建对象

    千次阅读 2019-05-09 11:02:35
    动态创建对象 2019-5-9 动态创建对象 int * p = new int; //不设定初值;对于自定义对象,调用默认无参构造函数 int * p = new int(); //设定初值为0,对于自定义对象,调用含参构造函数 int * p = new int(2); ...
  • 动态对象数组创建

    千次阅读 2018-01-18 14:26:29
    [code="c++"] // 动态构建对象特点: /**** 1、在程序运行过程中... 3、动态申请对象数组,该对象一定要有默认构造函数 或 构造函数最左形式参数一定要有默认值 ***/ #include using namespac...
  • c++采用new建立对象数组

    万次阅读 热门讨论 2018-07-17 20:24:40
    推荐用vector。 参考此文:... object *p = new object[3]; p[0] = ...上述情况是否需要定义构造函数?答案是不需要(有默认构造函数就足够了)。如果对象有用户自定义的构造函数...
  • 动态创建对象,并给对象属性赋值

    千次阅读 2018-08-27 15:01:38
    动态的设置java对象的属性值?借助java反射机制以及javassist能够轻松解决这些问题。 简单介绍Java的反射原理  Java的反射机制是Java特性之一,反射机制是构建框架技术的基础所在。Java程序要能够运行,java...
  • 另一种是动态建立对象,如A* p = new A; 这两种方式是有区别的:  静态建立类对象:是指全局对象,静态对象,以及分配在栈区域内的对象,编译器对它们的内存分配是在编译阶段就完成的,是通过直接移动栈顶...
  • C++实现只能动态或者静态创建对象

    万次阅读 2017-09-02 22:36:18
    C++如何实现类对象只能动态分配或只能静态分配C++中建立类的对象有两种方式: (1)静态建立,例如 A a;... 动态建立一个类对象,就是使用new运算符为对象在堆空间中分配内存。这个过程分为两步:第一步执行operator
  • 在QML中管理动态对象

    万次阅读 2012-09-20 10:41:28
    ...QML提供了很多种方式动态创建和管理QML对象.Loader,Repeater,ListView,GridView和PathView都支持动态对象管理.对象也可在C++中创建并管理,这是QML\C++相结合的应用程序首选方法. QML也支持
  • 在Unity3D中动态创建对象和创建Prefab原型对象的三种方式 u3d里动态创建对象,需要使用prefab 而创建的时候 MonoBehaviour.Instantiate( GameObject orignal) 需要一个作为原型的对象。 本文提供三种方式获得...
  • C++如何实现类对象只能动态分配或只能静态分配 C++中建立类的对象有两种方式: (1)静态建立,例如 A a;... 动态建立一个类对象,就是使用new运算符为对象在堆空间中分配内存。这个过程分为两步:第一步执行o
  • Spring AOP原理之建立AopProxy代理对象

    千次阅读 2018-05-15 15:41:43
    通过JDK的动态代理特性,可以为任意Java对象创建代理对象,对于具体使用来说,这个特性是通过Java Reflection API来完成的。 设计原理 以ProxyFactory的设计为中心,可以看到相关的类继承关系如图所示: P...
  • 使用js动态循环创建对象

    千次阅读 2018-07-26 13:41:28
    $.each($('input:checkbox:checked'),function(index){ window["url"+index]=""+$(this).val()+"&...以上就是动态创建的代码,主要就是window["url"+...
  • C++创建类对象方法和动态对象数组

    千次阅读 2019-03-17 16:03:57
    C++中有两种创建对象的方法,一种是直接声明,另一种则是使用new关键字,虽然作用相同,但是它们底层的存储方式却完全不同。在此之前,我们先了解一下C++程序的存储形式。 C++程序的内存格局通常分为四个区: 1. ...
  • 在delphi中如何动态建立类的实例

    千次阅读 2006-09-08 08:50:00
    引言 在面向对象语言中,用两种方法建立类的实例:静态建立和动态建立。静态建立就是在程序中显式地建立类的实例,如c1 = TClass1.Create()。而动态建立是在只知道类名的前题下建立类的实例。动态建立在实现上要比...
  • 控件数组的动态建立 设计窗体时建立控件组的第一个元素,并将其INDEX值赋为0 程序运行中使用LOAD方法,定义新的控件组元素,语法: LOAD 对象名(INDEX)值 使用UNLOAD方法可去除控件组中的元素。 INDEX值为...
  • 如何限制对象只能建立在堆上或者栈上

    千次阅读 多人点赞 2013-09-25 10:32:57
    在C++中,类的对象建立分为两种,一种是静态建立,如A a;另一种是动态建立,如A* ptr=new A;这两种方式是有区别的。  静态建立一个类对象,是由编译器为对象... 动态建立对象,是使用new运算符将对象建立在堆空间
  • 根据字符串类名动态创建对象

    千次阅读 2009-03-31 01:07:00
    根据字符串类名动态创建对象老板很无理的要求,硬是让程序能够根据给定的字符串类名来创建相应的对象,哎,为此折腾了几天!////////////////////////reflect.h文件#ifndef REFLECT_H#define REFLECT_Hclass Class...
  • Python中动态导入对象importlib.import_module()的使用

    万次阅读 多人点赞 2019-03-26 23:45:03
    一个函数运行需要根据不同项目的配置,动态导入对应的配置文件运行。 解决 文件结构 a #文件夹 │a.py │__init__.py b #文件夹 │b.py │__init__.py ├─c#文件夹 │c.py │__init__.py # c.py 中内容 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 428,846
精华内容 171,538
关键字:

如何动态建立对象