タイプのオブジェクトを作成するこのメソッドがあるとしますstd::vector< std::string >
const std::vector< std::string > Database::getRecordNames() {
// Get the number of recors
int size = this -> getRecordCount();
// Create container
std::vector< std::string > names;
// Get some strings
for ( i = 0; i < size; i++ ) {
// Get a string
const std::string & name = this -> getName( i );
// Add to container
names.push_back( name );
}
// Return the names
return names;
}
そして、別の場所で、この方法を使用します
void Game::doSomething() {
const std::vector< std::string > & names = mDatabase -> getRecordNames();
// Do something about names
}
したがって、メソッドDatabase::getRecordNames()
では、一時オブジェクトが返されますstd::vector< std::string >
。ただし、メソッドGame::doSomething()
では、戻り値を const std::vector< std::string > &
型オブジェクトに配置しました。
これは安全ではありませんか、それともこのように使用するのは完全に正常ですか? 私の知る限り、一時変数はスコープの最後で破棄されます。しかし、私たちの場合、この一時変数を参照します。値を返した後に破棄されると思います。
参照の代わりに戻り値のコピーを使用するように、他のメソッドを書き直したほうがよいでしょうか?
void Game::doSomething() {
const std::vector< std::string > names = mDatabase -> getRecordNames();
// Do something about names
}