我有一个程序可以在整个程序中散布随机数量的点。在运行时,我还想为每个点创建一个对象并将其存储在向量中。我创建了一个具有各种属性的Point类,但我不知道如何实现上述。在查看处理类似但不相同的问题的其他问题时,会使用指针,但同样,我不知道如何实现它们。
答案 0 :(得分:1)
我不太确定你真正想要达到的目标,但我希望这会对你有所帮助。
要动态创建对象,请使用new
运算符。 new
运算符始终返回指针:
Point* pointObj = new Point();
如果指定了构造函数,则调用与堆栈上的正常构造非常相似:
Point* pointObj = new Point(x,y);
std::vector在运行时(动态地在堆中)存储对象,但不是通过它自己创建它们而只是复制它们:
std::vector<Point> vec; //if this object is destructed it contents are destructed aswell
Point pointObj(x,y); //point on stack; will get destructed if it gets out of scope
vec.push_back(pointObj) //copy pointObj to a dynamic location on the heap
答案 1 :(得分:0)
好吧,我不知道你的Point构造函数采用了什么参数,但你的描述听起来好像你想做这样的事情:
std::vector<Point> MyGlobalPointList;
在你的程序中你有以下几个:
MyGlobalPointList.push_back(Point(x,y,color));
答案 2 :(得分:0)
您是否正在寻找与对象创建相关联的自动对象管理?如果是这样,AbstractFactory可以在这里帮助你。除了工厂是用于构建对象(点)的 THE 机制,而不是自己在任何地方这样做,它还可以执行对象管理,例如在向量中管理它们。
class Point {
friend class PointFactory;
Point(int _x, int _y) : x(_x), y(_y) { }
private:
~Point(); //destructor is private
int x, y;
}
class PointFactory {
public:
Point* createPoint() { //Creates random point
return createPoint(rand(), rand());
}
Point* createPoint(int x, int y) { //Creates specified point
Point* p = new Point(x, y);
points.push_back(p);
return p;
}
void deletePoint(Point *p) { //p not in use anymore
std::vector<Point*>::iterator it = std::find(objects.begin(), objects.end(), p);
if (it != objects.end()) {
objects.erase(it);
}
delete p;
}
private:
std::vector<Point*> objects;
}
int main(...) {
Point *p = pointFactory.createPoint(); //instead of new Point()
//use p
pointFactory.deletePoint(p); //p not in use anymore
return 0;
}
希望这就是你要找的东西。