C++中4T为类名执行语句Tp=new T9与Tp=Tnew charsizeofT9有什么不同。
这两个语句的区别在于内存分配的方式不同:
-
T*p=new T[9] 分配了9个T类型的连续空间,即在堆上分配了大小为sizeof(T)*9的空间,并返回指向该空间起始地址的指针p。
-
T*p=(T)new char[sizeof(T)*9] 先在堆上分配了大小为sizeof(T)*9的char类型的连续空间,即分配了足够存储9个T类型对象的空间。然后将该空间的起始地址强制转换为T类型的指针,并将其赋值给p。
总的来说,这两个语句的效果是一样的,都是在堆上分配了足够存储9个T类型对象的空间,并返回指向该空间起始地址的指针。不同的是,第二种方式需要进行类型转换,可能会存在一些风险。因此,第一种方式更加安全和方便。
原文地址: https://www.cveoy.top/t/topic/hvaZ 著作权归作者所有。请勿转载和采集!