找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 2075|回复: 9

[求助][原创]请教关于定位new表达式。。。

[复制链接]
发表于 2009-11-3 02:48:33 | 显示全部楼层 |阅读模式 IP:江苏扬州
请问C++ 定位new表达式构造的类对象的析构函数是什么时候调用的。
偶在vc6下编译下面的程序,发现只是调用了默认构造函数,析构函数没有调用。是不是定位new的对象需要显式调用析构函数,还是只是vc的问题? 谢谢

#include<iostream>
using namespace std;
class test
{
public:
test()
{
va=vb=0;
cout<<"default constructor!\n";
}
~test()
{
cout<<"desructor!\n";
}
private:
int va,vb;
};

int main()
{
char* mem=new char[sizeof(test)*100];
test* a=new(mem)test;
delete []mem;
return 0;
}
发表于 2009-11-3 02:48:35 | 显示全部楼层 IP:江苏扬州
我是这样认为的:
test* a=new(mem)test;你这一步相当于把mem与test浅复制了,指向同一内存,delete []mem;释放了共享内存;析够函数就起不到作用了;但是如果你直接delete a;这样析构函数就自行可以调用了
但如果你不delete,那么就内存泄露了,所以只能 delete a;
回复

使用道具 举报

发表于 2009-11-3 02:48:37 | 显示全部楼层 IP:江苏扬州
请问sizeof()这个函数是什么意思?有什么用法吗?
回复

使用道具 举报

发表于 2009-11-3 02:48:39 | 显示全部楼层 IP:江苏扬州
这一步相当于把mem与test浅复制了,指向同一内存,delete []mem;释放了共享内存;
char* mem=new char[sizeof(test)*100];
这是什么?
这只不过是给字符指针mem分配一个那么大的数组
这里根本没调用构造函数,
delete[]mem也就根本涉及不到类
sizeof()
是读取括号内对象所占的内存长度
回复

使用道具 举报

发表于 2009-11-3 02:48:40 | 显示全部楼层 IP:江苏扬州
呵呵,昨天晚上睡觉的时候才想到自己说错了
回复

使用道具 举报

发表于 2009-11-3 02:48:41 | 显示全部楼层 IP:江苏扬州
char* mem=new char[sizeof(test)*100];
这是什么?
这只不过是给字符指针mem分配一个那么大的数组

虽然这里没有调用构造函数,但是
test* a=new(mem)test;这里调用了啊

这里应该相当于又分配了一个内存给a;

你delete []mem; 只是释放了mem,而与 a所指的内存块没关系,所以要delete a;系统才知道a结束了他的生命周期,否则相当于内存泄露。
回复

使用道具 举报

发表于 2009-11-3 02:48:42 | 显示全部楼层 IP:江苏扬州
这还差不多,
wfpb注意身体呀
pnew 之后自己相应delete
就会有析构了
回复

使用道具 举报

发表于 2009-11-3 02:48:46 | 显示全部楼层 IP:江苏扬州
test* a=new(mem)test;这句并没有分配内存,他的意思是mem那块内存上构造对象,primer上说没有与定位new对应的delete,释放时直接释放以前分配的整块内存~。
回复

使用道具 举报

发表于 2009-11-3 02:48:50 | 显示全部楼层 IP:江苏扬州
有构造就有析构
楼主最后面加上delete a;
就会有析构了
至于为什么没有错误就通过了
不delete就泄露呗
和primer说的一样
new返回的是mem所指向的地址,而不是mem那块(mem那块才4个字节...)
而后来delete mem,也相应的delete TEST 那部分
但是主要不是这里.还是你没delete的原因,但你要把delete mem去掉
因为那里delete俩遍.
回复

使用道具 举报

发表于 2009-11-3 02:48:52 | 显示全部楼层 IP:江苏扬州
呵呵,以前的回帖有些问题,前两天才见过new(parameters)TYPE这一种写法,才理解意思,所以以前是误解意思了
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 11:40 , Processed in 0.267280 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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