1

我有三个指向三个对象的指针:

MyClass* a = new MyClass(...);
MyClass* b = new MyClass(...);
MyClass* c = new MyClass(...);

现在我想在 MyClass 中指定一个运算符,以便我可以这样做:

a = b*c;

所以 a、b 和 c 已经是现有的大型对象,我不想制作任何额外的副本。我想做乘法并直接写出结果'a'。

1)这甚至可以用c ++运算符吗?2)有人可以给我一些语法提示吗?(我对操作员有点陌生..)

感谢任何帮助。

4

2 回答 2

1

如果您operator*MyClass.

MyClass* a = new MyClass(...);
MyClass* b = new MyClass(...);
MyClass* c = new MyClass(...);

你应该像下面这样使用它:

*a = (*b) * (*c);

而你不能为指针做到这一点。例如这是不可能的:

MyClass *operator*(const MyClass *a, const MyClass *b) // Impossible
{
 ...   
}

因为运算符定义必须有一个参数MyClass

于 2013-05-10T14:42:07.370 回答
0

你真的不想这样做。坚持为值而不是指向值的指针定义运算符的标准方式将使一切变得更清洁和更易于维护。

编辑aschepler 在评论中指出你甚至不能这样做。至少有一个参数必须是类类型或对类的引用。

如果您想避免大量复制操作,您应该使用 C++11 移动语义或通过类似 aMoveProxyBoost.Move支持库之类的东西来模拟它们。

示例代码:

// loads of memory with deep-copy
struct X {
  int* mem; 

  X() : mem(new int[32]) { }
  // deep-copy
  X(const X& other) 
    : mem(new int[32]) { std::copy(other.mem, other.mem+32, this.mem); }
  ~X() { delete[] mem; }
  X& operator=(const X& other) { std::copy(other.mem, other.mem+32, this.mem); return *this; }
  X(X&& other) : mem(other.mem) { other.mem = nullptr; }
  X& operator=(X&& other) { delete[] mem; this.mem = other.mem; other.mem = nullptr; return this; }

  friend void swap(const X& x, const X& y)
  { std::swap(x.mem, y.mem); }


  friend
  X operator*(const X& x, const X& y)
  { return X(); }
};
于 2013-05-10T14:50:09.810 回答