私は自分の C++ スキルを磨こうとしていました。私は2つの機能を持っています:
concat_HeapVal()
出力ヒープ変数を値で
concat_HeapRef()
返します 出力ヒープ変数を参照で返します
main() が実行されると、スタック上にあり、s1 と s2 がスタック上にあり、ref のみで値を渡し、以下の各関数で、ヒープに変数を作成してそれらを連結します。
concat_HeapVal() が呼び出されると、正しい出力が返されます。
concat_HeapRef() が呼び出されると、メモリ アドレスが返されます (間違った出力)。なんで?
両方の関数で new 演算子を使用します。したがって、ヒープに割り当てます。
したがって、参照によって戻ると、main() スタック メモリが範囲外になっても、ヒープは引き続き有効です。
したがって、メモリのクリーンアップはOSに任されています。右?
string& concat_HeapRef(const string& s1, const string& s2)
{
string *temp = new string();
temp->append(s1);
temp->append(s2);
return *temp;
}
string* concat_HeapVal(const string& s1, const string& s2)
{
string *temp = new string();
temp->append(s1);
temp->append(s2);
return temp;
}
int main()
{
string s1,s2;
string heapOPRef;
string *heapOPVal;
cout<<"String Conact Experimentations\n";
cout<<"Enter s-1 : ";
cin>>s1;
cout<<"Enter s-2 : ";
cin>>s2;
heapOPRef = concat_HeapRef(s1,s2);
heapOPVal = concat_HeapVal(s1,s2);
cout<<heapOPRef<<" "<<heapOPVal<<" "<<endl;
return -9;
}