delete一定要和new成对出现?
#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 = 'D';
testing = '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;
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? 需要。你在椎中用new申请了一块内存,需要用delete来手动释放
如果不写delete,那么只有在整个程序结束时才释放内存
任何情况下都建议将new和delete配对使用 BngThea 发表于 2018-3-1 08:54
需要。你在椎中用new申请了一块内存,需要用delete来手动释放
如果不写delete,那么只有在整个程序结束时 ...
了解啦谢谢!! 保持良好的编程习惯需要成对写,这也是推荐的方式.你要明白每个应用程序运行时是一个单独的进程,而操作系统会给每个进程分配空间,使用new申请内存其实是在自己的进程空间的堆内存里申请(操作系统给的空间已足够大),所以你不写delete时只要你的程序结束其所在的进程空间就会被回收,所以通常不写也没什么影响.但是对于像服务器这种进程常年运行很少终止的程序就必须得注意了,因为你new一次就获得了一次空间,但是你程序不结束内存也就不会释放,从而导致进程占内存越来越大,造成程序卡顿,内存泄漏甚至崩溃.所以良好的习惯需要成对写 北辰制作室 发表于 2018-3-1 09:10
保持良好的编程习惯需要成对写,这也是推荐的方式.你要明白每个应用程序运行时是一个单独的进程,而操作系统 ...
谢谢指教!!
页:
[1]