搜索
bottom↓
回复: 2

new 的用法,疑问汇总

[复制链接]

出0入0汤圆

发表于 2009-11-10 09:42:53 | 显示全部楼层 |阅读模式
在使用new时有些疑问



1. 如何对此数组空间初始化?

如:int *pA = new int[100];


fun()
{
  int *pA = new int[100];
  ...
}
2. 是不是每次运行函数都会申请新的空间?

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2009-11-10 09:44:10 | 显示全部楼层
是不是每次运行函数都会申请新的空间?  是的。

出0入0汤圆

 楼主| 发表于 2009-11-10 09:44:17 | 显示全部楼层
另外摘录一些网上的说明
一、基本数据类型的动态分配
new和delete已经完全包含malloc和free的功能,并且更强大、方便、安全。使用动态分配内存时不能忘记释放内存,不要忘记出错处理!下面先看new和delete的基本使用方法。#include <iostream>
using namespace std;
int main ( )
{
        // 基本数据类型
        int *i = new int;        // 没有初始值
        int *j = new int(100);        // 初始值为100
        float *f = new float(3.1415f); // 初始值为3.14159
        cout << "  i = " << *i << endl;
        cout << "  j = " << *j << endl;
        cout << "  f = " << *f << endl;
        // 数组
        int *iArr = new int[3];
        for (int i=0; i<3; i++)
        {
                iArr = (i+1)*10;
                cout << i << ": " << iArr << endl;
        }
        // 释放内存
        delete i;
        delete j;
        delete f;
        delete []iArr;        // 注意数组的删除方法
        return 0;
}
二、内存分配时的出错处理
一般有2种处理方法,一是根据指针是否为空来判断,一是用例外出错处理所抛出的“bad_alloc”来处理。
#include <iostream>
#include <new>
using namespace std;
int main ( )
{
        // 判断指针是否为NULL
        double *arr = new double[100000];
        if (!arr) {
                cout << "内存分配出错!" << endl;
                return 1;
        }
        delete []arr;
        // 例外出错处理
        try {
                double *p = new double[100000];
                delete []p;
        } catch (bad_alloc xa) {
                cout << "内存分配出错!" << endl;
                return 1;
        }
        // 强制例外时不抛出错误,这时必须要判断指针
        double *ptr = new(nothrow) double[100000];
        if (!ptr) {
                cout << "内存分配出错!" << endl;
                return 1;
        }
        delete []ptr;
        cout << "内存分配成功!" << endl;
        return 0;
}
三、用new产生类的实例
前面章节已经用了很多了。
#include <iostream>
using namespace std;
class classA
{
        int x;
public:
        classA(int x) { this->x = x; }
        int getX() { return x; }
};
int main ( )
{
        classA *p = new classA(200);        // 调用构造函数
        if (!p)
        {
                cout << "内存分配出错!" << endl;
                return 1;
        }
        cout << "x = " << p->getX() << endl;
        delete p;        // 调用析构函数
        return 0;
}
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-31 23:34

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表