关于存储空间的问题

ftkghost 2004-10-12 10:57:47
#include<iostream>
#include<string.h>
class A{
char* p;
public:
A()
{
p=new char[1];
p[0]='\0';
}
A(char* ap)
{
p=new char[strlen(ap)+1];
strcpy(p,ap);
}
~A()
{
delete [] p;
}
};

int main()
{
A *Array;
Array=new A[10];
delete [] Array;
return 0;
}
请问:构造函数中分配的空间是在Array申请的空间中还是另辟空间?理由?
...全文
165 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
chusky 2004-10-14
  • 打赏
  • 举报
回复
我认为是另辟空间,要不然为什么在析构函数中还要用delete[] p呢?
这就是说,即使对象的空间被释放了,但p所申请的空间仍然没有被释放,
也就是说p所申请的空间不在Array所申请的空间中
htt80 2004-10-13
  • 打赏
  • 举报
回复
只要跟踪一下就知道了,首先是Array在堆中申请了新空间,然后在构造函数中p又在堆中申请了一段新的空间。但不知道析构函数执行了没有?
纪俊 2004-10-13
  • 打赏
  • 举报
回复
这种new申请的在超出他的生存空间之后好像可以自动被释放吧
以前好像是不行的,在C#中肯定可以:)
/////////////////////////////////////////////////////////////////////
欢迎大家使用编程文档手册V3.5,编程辅助类软件

集编程文档的收集、查询、浏览、编辑等功能于一体的辅助编程类软件。通过日积月累,相信本软件将给广大程序开发人员以及编程爱好者们带来很大的帮助。

下载地址:
天空软件站:http://www.skycn.com/soft/11906.html
华军软件园:http://www.onlinedown.net/soft/6496.htm
详细说明与注册地址:http://www.sharebank.com.cn/soft/soft_view.php?id=10648
官方网站:http://promanual.jijun.org
工作室站点:http://www.jijun.org

欢迎大家使用,欢迎大家多多指教。
/////////////////////////////////////////////////////////////////////
ftkghost 2004-10-13
  • 打赏
  • 举报
回复
我所谓的Array申请的空间就是在main()函数中
Array=new A[10];这句申请的空间
Squall1009 2004-10-13
  • 打赏
  • 举报
回复
不知道你的Array申请是什么意思.
不过new申请的空间全部是在堆中的.

同意Leaveye(~枝)(完全了解系统,也要实际量测性能)的看法

zjpixyniannian 2004-10-13
  • 打赏
  • 举报
回复
对啊,Array=new A对应的是delete Array; 不是delete [] Array;
htt80 2004-10-13
  • 打赏
  • 举报
回复
析构函数是执行了,但出现了一个问题无法理解,我把Array=new A[10]改为Array=new A时就报错了,好象是析构有问题,不知道为什么?
Leaveye 2004-10-12
  • 打赏
  • 举报
回复
不同意楼上。
是另辟空间。

A 的成员(除了函数)只是一个字符指针。
在构造函数中,从堆中申请空间。
对于默认构造,只要了一个字节,设为 '\0';
对于拷贝构造,是按需申请的。

Array 指向的可以认为是一系列的 A 类对象。每个元素都是一个指针(函数指针不清楚是不是在这里的)。

构造函数只是为该指针分配了有效的空间。而析构函数对其回收。
A 类的对象在结束时,自动回收的只是这个指针成员变量占用的空间。
Dong 2004-10-12
  • 打赏
  • 举报
回复
不过你的构造函数
A()
{
p=new char[1];
p[0]='\0';
}
A类分配的只是p的空间
而new char[1]分配的空间是另申请的。
Dong 2004-10-12
  • 打赏
  • 举报
回复
是在Array

不然的话你sizeof(A)怎么有那么大啊??

其实构造函数在完成之前已经先分配好数据成员的空间了,这些空间都是算在sizeof(A)里的!

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧