- C++
如何new 结构体
- 2025-7-3 22:24:42 @
在C++中,使用new
操作符创建结构体(struct)的实例与创建类(class)的对象非常相似。结构体和类的主要区别在于默认访问权限(struct是public,class是private),但内存分配方式相同。
基本语法
假设你有一个结构体定义:
struct Point {
int x;
int y;
};
使用new
动态创建结构体实例的语法是:
Point* p = new Point; // 创建一个Point结构体的实例,返回指向它的指针
初始化结构体
创建结构体实例后,可以通过指针访问其成员并初始化:
p->x = 10; // 使用箭头操作符(->)访问指针指向的结构体成员
p->y = 20;
或者在创建时直接初始化(C++11及以后支持):
// 方法1:使用花括号初始化列表
Point* p1 = new Point{10, 20}; // C++11及以后
// 方法2:使用构造函数语法(即使结构体没有显式定义构造函数)
Point* p2 = new Point(10, 20); // C++20及以后更推荐
完整示例
下面是一个完整的示例,展示如何使用new
创建结构体并访问其成员:
#include <iostream>
using namespace std;
// 定义一个简单的结构体
struct Rectangle {
int width;
int height;
// 可选:定义一个构造函数
Rectangle(int w, int h) : width(w), height(h) {}
int area() { return width * height; }
};
int main() {
// 使用new创建结构体实例(方法1:默认构造)
Rectangle* rect1 = new Rectangle;
rect1->width = 5;
rect1->height = 10;
cout << "Rectangle 1 area: " << rect1->area() << endl;
// 使用new创建结构体实例(方法2:带初始化列表)
Rectangle* rect2 = new Rectangle{8, 12}; // C++11及以后
cout << "Rectangle 2 area: " << rect2->area() << endl;
// 使用new创建结构体实例(方法3:带构造函数参数)
Rectangle* rect3 = new Rectangle(3, 7); // C++20及以后
cout << "Rectangle 3 area: " << rect3->area() << endl;
// 记得释放内存!
delete rect1;
delete rect2;
delete rect3;
return 0;
}
关键点总结
- 内存分配:
new
返回指向结构体的指针,内存位于堆上。 - 访问成员:通过箭头操作符(
->
)访问指针指向的结构体成员。 - 初始化:
- C++11及以后:使用花括号初始化列表
{...}
。 - C++20及以后:推荐使用构造函数语法
(...)
。
- C++11及以后:使用花括号初始化列表
- 内存管理:使用
delete
释放new
分配的内存,避免内存泄漏。
动态数组结构体
如果你需要创建结构体的动态数组,语法如下:
// 创建包含10个Point结构体的数组
Point* points = new Point[10];
// 访问数组元素
points[0].x = 0; // 第一个元素的x坐标
points[0].y = 0; // 第一个元素的y坐标
// 释放数组内存
delete[] points; // 注意使用delete[]释放数组
通过这些方法,你可以灵活地在C++中使用new
创建和管理结构体实例啦!
0 条评论
目前还没有评论...