在c++的引用学习中,遇到一些问题,比如返回成员函数内部变量的引用,这个变量会在函数声明周期结束的时候就被析构,然后返回了这个变量的引用就会出现一个错误的内存的引用,具体例子入下:
// TheRefOfc++.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
string version1( string& s1, const string& s2); //return 拷贝
const string& version2(string& s1, const string& s2); //返回引用
const string& version3(string& s1, const string s2); //bad 设计
int _tmain(int argc, _TCHAR* argv[])
{
string input;
string copy;
string result;
cout << "Enter a string: ";
getline(cin, input);
copy = input;
cout << "Your String as entered :" << input << endl;
result = version1(input, "***");
cout << "Your String enhanced: " << result << endl;
cout << "Your Original string: " << input << endl;
result = version2(input, "###");
cout << "Your string enhanced: " << result << endl;
cout << "Your original string: " << input << endl;
cout << "Resetting original string: " << endl;
input = copy;
result = version3(input, "@@@");
cout << "Your string enhanced: " << result << endl;
cout << "Your original string: " << input << endl;
getchar();
getchar();
return 0;
}
string version1(string& s1, const string& s2){
string temp;
temp = s2 + s1 + s2;
return temp;
}
const string& version2(string& s1, const string& s2){
s1 = s2 + s1 + s2;
return s1;
}
const string& version3(string& s1, const string s2){
string temp;
temp = s2 + s1 + s2;
return temp;
}
上面的例子中,当程序执行到最后的rsult赋值的时候,会把一个空的引用赋值给result,在这里就会出现空的指针的引用,会报一个bad_ptr的错误,在日常写程序的过程中,应该避免出现这样的空指针的引用,千万要注意不要返回局部变量的引用,因为他的生命周期只到函数结束。