-2

我对 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-B 进行操作?

而且,我不明白在我的方法中构造了多少对象,以及如何通过一些参考来优化内存消耗。

4

2 回答 2

1

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

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

Vec2D that = *this;

回答你的第二个问题:

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

你怎么能优化它?使用参考...

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

并在 Vec2D 上实现 operator- 以使用引用...通常,将参数作为 (const) 引用传递。

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

于 2013-05-09T15:30:08.547 回答
0

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

如果调用A.minus(B),“this”指针指向 A。

于 2013-05-09T15:28:13.617 回答