【发布时间】:2015-08-12 18:24:53
【问题描述】:
我是 C++ 编程的新手,我想知道一些事情:
每当我在 C++ 中看到运算符重载时,都是这样完成的:
#ifndef STONE_H
#define STONE_H
class Stone {
private:
int weight;
public:
.......
Stone operator+(const Stone& s) {
Stone stone;
stone.weight = this->weight + s.weight;
return stone;
}
.......
}
#endif
但是当调用“+”操作符时,它会创建一个对象“stone”,并返回它的一个副本。处理大对象时,这对性能没有好处吗?
使用动态内存不是更好吗,如下例所示:
Stone * operator+(const Stone& s) {
Stone * stone = new Stone;
stone->weight = this->weight + s.weight;
return stone;
}
还是我看错了?
提前致谢
【问题讨论】:
-
谁会释放这些对象?在这里
a+b+c? -
始终将 new 与 delete 配对(使用二元运算符可能会导致内存泄漏)。第一种方法很好(看看返回值优化)
-
您缺少的是所有严肃的编译器都实现了 NRVO,这意味着他们通常可以避免在这种情况下复制返回的对象。相反,它们在适当的位置创建返回值。搜索 RVO 和 NRVO 以获取有关其工作原理以及如何应用于此类运算符重载的更多信息
标签: c++ operator-overloading dynamic-memory-allocation