我已经很久没用C ++编写了代码。最近,我正在尝试做点什么 涉及结构。喜欢这个
typedef struct{
int x;
int y;
} Point;
然后在循环中,我正在尝试创建新的结构并在列表中将它们指向它们。
Point* p;
int i, j;
while (condition){
// compute values for i and j with some function...
p = new Point;
p* = {i, j}; //initialize my struct.
list.append(p); //append this pointer to my list.
}
现在,我的问题是可以简化这个吗?我的意思是,指针 变量* p在循环之外并且在循环内调用p = new Point。 是不是有更好/更好的语法?
答案 0 :(得分:10)
不确定
Point * p = new Point;
你可能也应该给你的Point类一个构造函数:
struct Point { // note no need for typedef
int x;
int y;
Point( int ax, int ay ) : x( ax ), y( ay ) {}
};
这样你就可以说:
Point * p = new Point( i, j );
您可能还希望使列表成为Point值的列表,而不是指针,在这种情况下,您可以避免使用new进行动态分配 - 在C ++中尽可能避免使用。
答案 1 :(得分:5)
struct可以有一个构造函数,如:
struct Point{
Point(int ax, int ay):x(ax), y(ay){}
int x;
int y;
};
然后该函数看起来像:
int i, j;
while (condition)
{
list.append(new Point(i,j));
}
答案 2 :(得分:2)
由于结构体是默认情况下具有公共成员的类,您甚至可以在结构体中创建一个构造函数,并在循环中初始化您的点对象,如下所示:
Point* p = new Point(i,j);
答案 3 :(得分:1)
我猜想你真的需要动态地分配像Point这样的东西。
您很可能想要添加构造函数并按值存储它们:
list<Point> list;
list.append(Point(x, y));
答案 4 :(得分:0)
我推荐工厂方法。假设“Point”将是许多对象的基类,你可以拥有一个返回指针的“Factory”。
例如:
struct Point
{
Point(int mx, int my):x(mx),y(my) {}
int x;
int y;
};
// Circle, Polygon, etc.
class Factory
{
public:
static Point *getPoint(int mx, int my) { return new Point(mx, my); }
// Circle, Polygon, etc
};
然后在某个地方的代码中:
while(cond)
{
list.append(Factory::getPoint(i, j));
}