我已经编写 C++ 很长时间了,所以我不知道这一点感到很傻,但是......
我经常编写对性能敏感的代码,当我这样做时,我会尽量避免堆分配。为此,我经常重复使用预先分配的小对象数组,而不是为每个单独的对象调用 new 和 delete。
在这种情况下,我通常会这样做:
class MyClass
{
private:
int x, y;
public:
inline void Set(_x, _y) { x = _x; y = _y; }
};
...
MyClass &objectToReuse = someArray[someIndex];
objectToReuse.Set(someXValue, someYValue);
但是我怀疑这个更好看的版本会生成相同的代码:
class MyClass
{
private:
int x, y;
public:
inline MyClass(_x, _y) : x(_x), y(_y) {}
};
...
MyClass &objectToReuse = someArray[someIndex];
objectToReuse = MyClass(someXValue, someYValue);
现代 C++ 编译器会“得到”这个,还是会构造一个临时对象然后复制它?