一道笔试题

bsnry 2012-05-24 12:16:22
遇到一个奇怪的笔试题目

题目大概如下:

template<typename T>
class Test
{
public:
Test(int len)
{
data =(char*) new [sizeof(T) *( len+ len/2));


}


void Constructor()
{
for(int i=0;i<len;i++)
::new(data+i)T;

}

void Destroy()
{
delete [](char*)data;

}



T* data;
};

今早笔试遇到的,让我改正,我觉得问题有2个,
1.分配大小哪里,为什么要多出 len/2个来???
2.利用placement new的时候,少了len2/
3.析构的时候,由于转换为char*,那么是无法调用析构函数的



大家认为这个代码有什么问题, 题目大概是这个样子的

...全文
198 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
airwolf1216 2012-05-25
  • 打赏
  • 举报
回复
这题好难 我第一次看到::new(data+i)T;

这种写法
我有几个疑问
第一、::new是不是调用的全局的new(即没有被重载的new)?
第二、::new(data+i)T;这货解开来,是不是data+i=new T;????

pathuang68 2012-05-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

1,data =(char*) new [sizeof(T) *( len+ len/2));
真心不知道是C学到不好还是C++学的不好。

改为:
data =(char*) new char[sizeof(T) *( len+ len/2));

2, 你丫的没记录下len,谁知道有几个T?

3,Constructor & Destroy,重复调用怎么办? 没点判……
[/Quote]

++
qq120848369 2012-05-24
  • 打赏
  • 举报
回复
1,data =(char*) new [sizeof(T) *( len+ len/2));
真心不知道是C学到不好还是C++学的不好。

改为:
data =(char*) new char[sizeof(T) *( len+ len/2));

2, 你丫的没记录下len,谁知道有几个T?

3,Constructor & Destroy,重复调用怎么办? 没点判断? len是总长度,used_len规定一下已构造的长度?

4,Destroy注定错了? 开辟的char,结果当做T来delete[],这在C++里是不行的,you know?

5,没析构函数? 想泄露吗?
nice_cxf 2012-05-24
  • 打赏
  • 举报
回复
data =(char*) new [sizeof(T) *( len+ len/2));
应该是
data =(char*) new char[sizeof(T) *( len+ len/2)];
Constructor里面new,格式也是错的,不知道想做什么,所以也不知道该怎样改 ,并且都没赋值,以后怎么delete?
nature19862001 2012-05-24
  • 打赏
  • 举报
回复
你基本都猜对了。。。
nature19862001 2012-05-24
  • 打赏
  • 举报
回复
你基本都猜对了。。。
羽飞 2012-05-24
  • 打赏
  • 举报
回复
for(int i=0;i<len;i++)
::new(data+i)T;

这个len貌似没定义
羽飞 2012-05-24
  • 打赏
  • 举报
回复
我认为delete的时候强制转换为char *是正确的,因为就是按照这种类型申请的

new [sizeof(T) *( len+ len/2));-->
new [sizeof(T) *( len+ len/2)]; new不接数据类型对不对?请大神指点?
没看出来多len/2有什么用或有什么错误
j8daxue 2012-05-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
傻逼才去学模板.
面试题这些其实不要纠结.
重要的是思维!!!快从应试教育中跳出来!
[/Quote]
....STL表示不高兴
liutengfeigo 2012-05-24
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20120507/12/5ac3a8af-5b2c-473d-9865-bbd5b48e6506.html
这么好的帖子不好好看.
唉,木有办法.社会总是垃圾信息一大堆.
自己不擅长分析,注定废.
liutengfeigo 2012-05-24
  • 打赏
  • 举报
回复
傻逼才去学模板.
面试题这些其实不要纠结.
重要的是思维!!!快从应试教育中跳出来!
haxer 2012-05-24
  • 打赏
  • 举报
回复
没问题才怪。。
bsnry 2012-05-24
  • 打赏
  • 举报
回复
1和2 是我打字漏了,不好意思啊

但是那个len/2 是怎么回事???




[Quote=引用 6 楼 的回复:]
1,data =(char*) new [sizeof(T) *( len+ len/2));
真心不知道是C学到不好还是C++学的不好。

改为:
data =(char*) new char[sizeof(T) *( len+ len/2));

2, 你丫的没记录下len,谁知道有几个T?

3,Constructor & Destroy,重复调用怎么办? 没点判断……
[/Quote]

64,636

社区成员

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

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