「未使用」の動的オブジェクトのスタックがあるとします。新しいオブジェクトが必要になるたびに、この「未使用」オブジェクトの 1 つを新しい請願のプレースホルダーとして使用します。何かのようなもの:
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)...));
つまり、new
with newbie
as address の呼び出し (新しいメモリの要求を回避する) と、元のオブジェクトを上書きする新しい一時オブジェクトの移動のどちらがより時間効率がよいのでしょうか?