使用非指针操作指针

时间:2013-05-09 15:23:52

标签: c++ pointers

我对C ++很陌生,我还不太了解指针。

这没关系,我有2个非指针对象:

Vec2D A(0, 0), B(10, 10);
Vec2D C = A-B;

但是如果一个是指针?

Vec2D::minus(Vec2D B) {
    Vec2D that = Vec2D(this->x(), this->y());
    return that-B;
}

所以问题是:我怎样才能将指针this-操作一起使用?

另外,我不明白在我的方法中构造了多少个对象,如何通过一些引用来优化内存消耗..

2 个答案:

答案 0 :(得分:1)

如果我正确地提出了你的问题......“这是一个指针,如何使用需要非指针的方法操作它和其他指针?”

您使用取消引用运算符* 例如:

Vec2D that = *this;

回答你的第二个问题:

  • 创建一个对象以将其作为minus
  • 的参数传递
  • 一个对象由Vec2D(this->x(), this->y())创建(但可能会被优秀的优化编译器删除为临时文件)
  • 您在堆栈(that
  • 上创建了一个对象
  • 取决于您如何实现它们,以及您的编译器有多好,您可以在复制构造函数/ operator =
  • 中创建另一个对象
  • 您的操作员可以在that-B
  • 中创建一个或多个对象
  • 创建一个要返回的对象(只有一个,而不是两个,因为返回值优化由所有编译器AFAIK完成)

您如何优化它?使用参考...

Vec2D Vec2D::minus(const Vec2D& B) {
   return that-*this;
}

在Vec2D上实现操作符也可以使用引用... 通常,将参数作为(const)引用传递。

显然,你不能对返回值做同样的事(尝试,编译器会抱怨..);也有这些技术(特别是在CG /游戏中,使用向量,我看到对象池使用了很多;对于那些返回引用/指针的人实际上是可行的,但它是相当高级的东西)

答案 1 :(得分:0)

“this”指针是一个自动生成的指针,指向包含被调用方法的对象。

如果您致电A.minus(B),则“this”指针指向A。