在操作中使用指针与非指针 我对C++很陌生,我对指针还不太了解。

在操作中使用指针与非指针 我对C++很陌生,我对指针还不太了解。,c++,pointers,C++,Pointers,这很好,我有两个非指针对象: 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 而且,我不知道在我的方法中构造了多少个对象,以及如何通过一些引用优化内存消耗。此指针是一个自动生成的指针,指向包含被调用

这很好,我有两个非指针对象:

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

而且,我不知道在我的方法中构造了多少个对象,以及如何通过一些引用优化内存消耗。

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


如果您调用A.减号(B),如果我没有弄错您的问题,“this”指针将指向A.

。。“这是一个指针,如何使用需要非指针的方法对它和其他指针进行操作?”

使用解引用运算符
*
例如:

回答你的第二个问题:

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

Vec2D Vec2D::minus(const Vec2D& B) {
   return that-*this;
}
并在Vec2D上实现运算符,以使用refereces。。。 通常,将参数作为(常量)引用传递


显然,您不能对返回值执行相同的操作(try,编译器会抱怨..);这方面也有一些技巧(特别是在CG/游戏中,使用向量时,我见过很多对象池;对于那些返回引用/指针的对象池来说,实际上是可能的,但这是非常高级的东西)

问题是什么?如果你问了100多个问题,我也会期待一个更好的问题。嘿,哇。一次问一个(具体的)问题。自从上次编辑以来,我已经数到了3个(“这是什么?”,“我如何构造对象?”和“我如何使用引用?”)。
Vec2D Vec2D::minus(const Vec2D& B) {
   return that-*this;
}