是否可以按照如下方式在堆内存中分配struct结构体?
你给出的代码可以正确完成struct Rectangle的堆内存分配,是合法的C++实现,运行后可以正常输出你赋值的20。
补充说明
- 你定义的
Rectangle是无自定义构造函数的聚合类型,new Rectangle会在堆上申请恰好等于sizeof(Rectangle)大小的内存空间,将首地址赋值给指针p的操作完全符合C++语法规则。 - 当前写法用的是默认初始化逻辑,结构体中的int类型成员
length、breadth不会被自动清零,会保留申请到的内存块的原有脏值。你手动给p->length赋值20之后再访问是安全的,但如果未赋值就直接访问p->breadth会触发未定义行为。 - 如果需要分配内存的同时自动将所有成员初始化为0,可以把分配语句改成
p = new Rectangle();,这种值初始化的写法会把所有内置类型的成员自动赋值为0。 - 堆上申请的内存使用完成后需要手动调用
delete p;释放,否则会出现内存泄漏问题。
内容的提问来源于stack exchange,提问作者Izaz Khan
相关产品推荐
相关产品推荐

