このコードは c++ で正しいですか?
list<int> makelist(int litem)
{
list<int> newList;
newList.push_front(litem);
return newList;
}
#include <list>
リスト (の) を値で返すのは問題がありますか?
このコードは c++ で正しいですか?
list<int> makelist(int litem)
{
list<int> newList;
newList.push_front(litem);
return newList;
}
#include <list>
リスト (の) を値で返すのは問題がありますか?
動作しますが、大量のメモリがコピーされる可能性があるため、効率的ではありません。次の C++ 標準では、この問題を解決できます。次のコードをお勧めします。
void fillList(list & lst) {
lst.push_front(...);
}
....
list newList;
fillList(newList);
コメントされているように、値による戻りは通常最適化されます (最適化をオンにして実行している場合)。したがって、速度が問題である場合 (プロファイラーによって証明されるまでは問題ありません)、心配する必要はありません。一方、コピー時に list に奇妙な副作用がある場合は、コンパイラと設定によってコピー コンストラクターの呼び出し回数が異なることに注意してください。
単純な型 (int、float、char) ではないローカル オブジェクトを返すことはできませんが、新しいオブジェクトへのポインターを返すことはできます。
list<int>* makelist(int litem)
{
list<int>* newList = new list<int>();
newList->push_front(litem);
return newList;
}
メモリリークを避けるために、後者のポインターを管理する必要があることに注意してください。