私はこれらの2つの簡単な機能を持っています。オブジェクトを参照渡しするので、func1
は良い解決策だと思いました。私の教科書は最高の解決策の答えとしてfunc2
を与えました。これは、heapstr
の割り当てを解除していないためですか?メインでheapstr
と宣言して関数に渡すと、後で削除することができますか?ヒープオブジェクトまたは戻り値への参照を返すべきですか?
#include <iostream>
using namespace std;
string& func1(const string &str) {
string* heapstr=new string();
for (int i = 0; i < str.size(); ++i) {
*heapstr += str[i];
}
return *heapstr;
}
string func2(const string &str) {
string heapstr;
for (int i = 0; i < str.size(); ++i) {
heapstr += str[i];
}
return heapstr;
}
int main() {
cout << func1("aaa") << endl;
cout << func2("aaa") << endl;
}
価値!常にデフォルト値として値を優先します!その漏れについて話すことさえありません。 – StoryTeller
'func2'、より安全で速い(https://stackoverflow.com/questions/161053/which-is-faster-stack-allocation-or-heap-allocation) – macroland
プレーンなポインタを使用する場合は、あなたが本当にそうする正当な理由があれば。 – Simon