gpt4 book ai didi

C++ 运算符重载返回指针

转载 作者:行者123 更新时间:2023-11-30 03:52:40 25 4
gpt4 key购买 nike

我是 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;
}

还是我看错了?

提前致谢

最佳答案

尝试推理并不是评估性能的特别准确的方法:您需要实际编写一个程序来衡量一种实现是否优于另一种实现。

有多种方法可以完全避免复制;命名返回值优化 (NRVO) 和移动赋值是这里的相关思想。

即使您决定要按照您的建议做某事,您也不应该像现在这样实现它,因为它有错误的语义:您已经让 operator+ 返回一个指针- to-thing 而不是一个东西。此外,使用指针(尤其是裸指针)是有风险的,因为它给了你更多犯错的机会。

如果你想按照这些思路实现一些东西,你需要将指针语义包装在一个提供值语义的类中。

关于C++ 运算符重载返回指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30537154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com