c++中函数中将引用用于类对象

来源:互联网 发布:javascript数组方法 编辑:程序博客网 时间:2024/06/16 20:17

在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的错误,在日常写程序的过程中,应该避免出现这样的空指针的引用,千万要注意不要返回局部变量的引用,因为他的生命周期只到函数结束。


0 0
原创粉丝点击