让我们假设我有一堆“未使用”的动态对象。每次我需要一个新对象时,我都会使用其中一个“未使用”对象作为新请愿的占位符。就像是:
template<typename T>
class my_list
{
public:
template<typename... Args>
T* newObject(Args&&... args)
{
if (unused.empty())
return new T(forward<Args>(args)...);
else {
auto* newbie = unused.top();
unused.pop();
newbie = new (newbie) T(forward<Args>(args)...); // l. X
return newbie;
}
}
private:
stack<T*> unused;
};
问题是,在第 X 行,什么更有效,书面句子,或者:
*newbie = std::move(T(forward<Args>(args)...));
这意味着,哪一个更省时,调用 a new
with newbie
as 地址(避免请求新内存)或简单地移动一个新的临时对象来覆盖原始对象?