返回局部变量、局部变量的引用和指向局部变量的指针
2010-10-13 20:38
435 查看
当返回局部对象的值时,会产生一个临时对象,局部对象将值拷贝给该临时对象(拷贝构造),
所以当函数结束时,尽管局部已经析构了,但是它保存了一个副本在临时对象中,当函数接收完局部对象的值后(其实此时又进行了一次拷贝)临时对象析构。
但返回局部对象的引用时,就出问题了,因为引用相当于是一个别名,也就是说返回局部引用所对应的内存快的内容给函数返回的接收对象,当函数结束时,局部对象被析构,内
存块的内容变为未定义内容,所以出错。指针也是同样的原因。
为 class A 重载一个拷贝构造函数
#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout<<"本体"<<endl;
}
A(const A& CA)
{
cout<<"分身"<<endl;
}
~A()
{
}
};
A fun();
int main()
{
fun();
return 0;
}
A fun()
{
A a;
return a;
}
然后再跑跑代码看看。
所以当函数结束时,尽管局部已经析构了,但是它保存了一个副本在临时对象中,当函数接收完局部对象的值后(其实此时又进行了一次拷贝)临时对象析构。
但返回局部对象的引用时,就出问题了,因为引用相当于是一个别名,也就是说返回局部引用所对应的内存快的内容给函数返回的接收对象,当函数结束时,局部对象被析构,内
存块的内容变为未定义内容,所以出错。指针也是同样的原因。
为 class A 重载一个拷贝构造函数
#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout<<"本体"<<endl;
}
A(const A& CA)
{
cout<<"分身"<<endl;
}
~A()
{
}
};
A fun();
int main()
{
fun();
return 0;
}
A fun()
{
A a;
return a;
}
然后再跑跑代码看看。
相关文章推荐
- 返回指向局部变量的指针或引用的带来的问题讨论
- 返回指向局部变量的指针或引用
- 返回指向局部变量指针的函数 与 返回局部变量引用的函数
- 返回指向局部变量的指针或引用的带来的问题讨论
- 返回指向局部变量的指针或引用的带来的问题讨论
- 返回指向局部变量的指针或引用的问题
- 返回指向局部变量的指针或引用
- 为什么C++中千万不要返回局部对象或变量的引用和指针
- 为什么返回值为数值时,返回局部变量可以,而返回值为引用时,返回局部变量不可以?
- 关于返回局部变量的指针或引用
- 不要返回指向局部变量的指针
- effective C++笔记之条款31、32: 千万不要返回局部对象的引用,也不要返回函数内部用new初始化的指针所指对象的引用、尽可能地推迟变量的定义
- 返回函数局部变量的指针和引用
- 为什么C++中千万不要返回局部对象或变量的引用和指针
- 杜绝返回函数内局部变量的指针或引用
- 如果从函数中返回局部变量的地址,引用或者指针的形式,则变量类型必须是静态的或者常量,即不在栈中存储
- C/C++ 子函数返回局部变量、指针 和改变指针指向
- C++函数传指针引用,以及函数返回局部变量
- 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序
- 果局部变量与实例变量同名,那么如何在局部变量的作用域内引用实例变量?