C++ 中 new T[9] 和 (T)new char[sizeof(T)*9] 的区别
这两个语句的区别在于内存分配的方式不同:
-
'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/oX0r 著作权归作者所有。请勿转载和采集!