我试图提高我的 C++ 技能。我有2个功能:
concat_HeapVal()
按值
concat_HeapRef()
返回输出堆变量 按引用返回输出堆变量
当 main() 运行时,它将在堆栈上,s1 和 s2 将在堆栈上,我仅通过 ref 传递值,并且在以下每个函数中,我在堆上创建一个变量并将它们连接起来。
当 concat_HeapVal() 被调用时,它会返回正确的输出。
当 concat_HeapRef() 被调用时,它会返回一些内存地址(错误的输出)。为什么?
我在这两个函数中都使用了 new 运算符。因此它在堆上分配。
因此,当我通过引用返回时,即使我的 main() 堆栈内存超出范围,堆仍然有效。
所以留给操作系统清理内存。对?
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;
}