请教一个问题

rayvon 2004-04-05 10:35:34
T *p = new T[5] 与T *p = (T)new char[sizeof(T)*5]
两者有何不同?请具体讲一下
...全文
19 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jp1984 2004-04-06
  • 打赏
  • 举报
回复
T *p = new T[5] //分配类型为T的,元素个数为五的数组空间

T *p = (T)new char[sizeof(T)*5]
/*这是错误的!!!因为左边是T*类型的指针,而右边强制转换char型的时候,为T类型,编译器会返回“cant invert T to T*”的出错信息。。*/
……………………………………………………………………………………………………
#include "stdafx.h"
#include "iostream"
using namespace std;

int main()
{

int* p=(int)new char[sizeof(int)*5];
cin>>*p;
cout<<*p;


}
/*c:\Documents and Settings\James\My Documents\Visual Studio Projects\sucker\sucker.cpp(12): error C2440: “初始化” : 无法从“int”转换为“int *”*/


……………………………………………………………………………………………………
/* 还有一种情况就是,你的(T)是作为可以省略的情况, 也是错的,因为左边是char*(数组等同于指针)而右边则是int*,这也是不行的。*/

// 你可以这样写,达到跟第一种一样的效果

¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
#include "stdafx.h"
#include "iostream"
using namespace std;

int main()
{

int* p=(int*)new char[sizeof(int)*5];
cin>>*p;
cout<<*p;


} //*love myj*
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥


maomaostevencao 2004-04-06
  • 打赏
  • 举报
回复
第一种方法:
申请类对象内存
调用构造函数初始化类对象
第二种方法:
仅仅申请了类对象的内存,没有调用构造函数初始化类对象。
这种方法后面还需要调用构造函数:for (i:0,5) new (p[i]);
另外,你的第二种方法的确打错了,也可能是你教材弄错了。
good luck!
rayvon 2004-04-05
  • 打赏
  • 举报
回复
没错啊,就是这样的。。。这是我们教材上的一个习题
LinuxPanther 2004-04-05
  • 打赏
  • 举报
回复
1.我觉得你,打错了一个地方,T *p =(T*)new char [sizeof(T)*5];
.......
我的感觉是没有什么不同了。

64,654

社区成员

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

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