将指针作为内存地址传递并使其永久化

时间:2012-02-20 20:06:40

标签: c++ pointers

我刚开始接近cpp。所以这可能是一个简单的问题,可能是一个结构性问题,我必须改变我的设计。

我有3个事实和1个问题。

事实1:

我有一个Gesture类,里面有一个Point向量

vector<Point> Gesture::getPoints();

Gesture实例在构造函数中重现向量,所以我认为它可能是法向量(无指针)。手势之间不共享矢量,手势也不会改变自己的点(除了标准化)。

事实2:

Gesture类有一个静态方法,可以规范化[0:w]之间的所有点。 normalize采用内存地址进行就地规范化。我认为正常化可能是一件好事。小部件使用此规范化方法来可视化矢量中的路径,以便在0和小部件宽度之间标准化点

static void Gesture::normalize(vectot<Point> &pts, int w);

事实3:

我有一个可视化点的小部件:

void MyWidget::setGestures(vector <Gesture *> gs)

因为手势是由另一个小部件产生的,我认为使用指针向量可以很方便地进行一些new Gesture调用。

问题:

我有几个可视化手势的小部件。每个都有不同的宽度(==不同的标准化)。

我第一次使用:

Gesture::rescale(this->w, this->points);
Gesture * g = new Gesture(getPoints(), centroids);

这一切都很好

我第二次:

vector<Gesture* > gs = foo();
int num_gesture = gs.size();
for (int i = 0; i < num_gesture; ++i) {
    vector<Point> pts = gs.at(i)->getPoints();
    Gesture::rescale( widget->getWidth(), pts );
}
widget->setGestures(gs);

这里有问题,因为这个小部件正在绘制不规范化的点。

我已经尝试了一些疯狂的指针,但如果程序没有崩溃..无论如何它没有规范化。它会得到一些错误:指向临时的指针。

我现在不知道该怎么想。

1 个答案:

答案 0 :(得分:1)

虽然你的问题有点令人困惑,但问题似乎是Gesture :: getPoints()返回一个向量而不是对向量的引用,所以它实际上将一个副本返回到内部向量,因此更改它不要修改手势对象本身。