鱼C论坛

 找回密码
 立即注册
查看: 2168|回复: 4

[已解决]delete一定要和new成对出现?

[复制链接]
发表于 2018-2-28 23:03:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <iostream>
#include <cstring>
#pragma warning(disable:4996)
using std::cout;
using std::cin;
using std::endl;
struct stringy
{
        char * str;        // points to a string
        int ct;            // length of string (not counting '\0')
};
void set(stringy & p, const char str[]);
void show(const stringy & p, const int n = 1);
void show(const char * pstr, const int n = 1);
int main()
{
        stringy beany;
        char testing[] = "Reality isn't what it used to be.";

        set(beany, testing);
        show(beany);       // prints member string once
        show(beany, 2);    // prints member string twice
        testing[0] = 'D';
        testing[1] = 'u';
        show(testing);     // prints member string once
        show(testing, 3);  // prints member string twice
        show("Done!");
        delete[] beany.str;      // 是否需要delete??????????????????
        return 0;
}

void set(stringy & p, const char str[])
{
        p.ct = strlen(str);
        p.str = new char[p.ct + 1];
        strcpy(p.str, str);
}
void show(const stringy & p, const int n)
{
        for (int i = 0; i < n; i++)
                cout << p.str << endl;
}
void show(const char * pstr, const int n)
{
        for (int i = 0; i < n; i++)
                cout << pstr << endl;
}


各位大佬,可以请教一下上文的delete这一行需不需要呢?
不写这一行,程序依然可以正确运行。
new和delete是不是一定要成对出现的呢?如果不是,什么情况下不用写delete?
最佳答案
2018-3-1 08:54:55
需要。你在椎中用new申请了一块内存,需要用delete来手动释放
如果不写delete,那么只有在整个程序结束时才释放内存

任何情况下都建议将new和delete配对使用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-1 08:54:55 | 显示全部楼层    本楼为最佳答案   
需要。你在椎中用new申请了一块内存,需要用delete来手动释放
如果不写delete,那么只有在整个程序结束时才释放内存

任何情况下都建议将new和delete配对使用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-1 09:07:50 | 显示全部楼层
BngThea 发表于 2018-3-1 08:54
需要。你在椎中用new申请了一块内存,需要用delete来手动释放
如果不写delete,那么只有在整个程序结束时 ...

了解啦谢谢!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-1 09:10:36 | 显示全部楼层
保持良好的编程习惯需要成对写,这也是推荐的方式.你要明白每个应用程序运行时是一个单独的进程,而操作系统会给每个进程分配空间,使用new申请内存其实是在自己的进程空间的堆内存里申请(操作系统给的空间已足够大),所以你不写delete时只要你的程序结束其所在的进程空间就会被回收,所以通常不写也没什么影响.但是对于像服务器这种进程常年运行很少终止的程序就必须得注意了,因为你new一次就获得了一次空间,但是你程序不结束内存也就不会释放,从而导致进程占内存越来越大,造成程序卡顿,内存泄漏甚至崩溃.所以良好的习惯需要成对写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-1 15:46:40 | 显示全部楼层
北辰制作室 发表于 2018-3-1 09:10
保持良好的编程习惯需要成对写,这也是推荐的方式.你要明白每个应用程序运行时是一个单独的进程,而操作系统 ...

谢谢指教!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-6 07:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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