网易笔试题

[复制链接]
 楼主| sinadz 发表于 2012-5-24 22:05 | 显示全部楼层 |阅读模式
题目大概如下:

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*,那么是无法调用析构函数的



大家认为这个代码有什么问题, 题目大概是这个样子的
yybj 发表于 2012-5-24 22:57 | 显示全部楼层
我认为delete的时候强制转换为char *是正确的,因为就是按照这种类型申请的
火箭球迷 发表于 2012-5-24 23:10 | 显示全部楼层
for(int i=0;i<len;i++)
::new(data+i)T;

这个len貌似没定义
pkat 发表于 2012-5-25 15:15 | 显示全部楼层
很基础的C++题目
秋天落叶 发表于 2012-5-25 23:19 | 显示全部楼层
这论坛里的面试笔试题还真不少
baidudz 发表于 2012-5-25 23:26 | 显示全部楼层
LZ基本上已经找到问题了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

304

主题

2313

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

304

主题

2313

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部