无用户输入创建动态对象

时间:2012-07-08 18:50:43

标签: c++ object pointers dynamic

我有一个程序可以在整个程序中散布随机数量的点。在运行时,我还想为每个点创建一个对象并将其存储在向量中。我创建了一个具有各种属性的Point类,但我不知道如何实现上述。在查看处理类似但不相同的问题的其他问题时,会使用指针,但同样,我不知道如何实现它们。

3 个答案:

答案 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;
}

希望这就是你要找的东西。

  • Ankur Satle