摘引有没有生命周期的概念!
引用有没有生命周期的概念!!
不知道怎么纠结这个问题!比如下面这段代码:
如果引用有生命周期的话,在fun函数中,作为区域变量的ra在生命周期结束也就是函数调用结束的时候会调用类A的析构函数,而在主函数main中,在主函数结束的时候a也会调用其析构函数,由于引用ra和a指向的是同一段内存,就会造成内存的多次释放,但是貌似又没有!怎么解释??
------解决方案--------------------
1.引用不是对象, 生命周期是属于对象的, 引用没有生命周期.
2.对象的析构函数的调用跟它的引用没有关系
------解决方案--------------------
第2点还是要补充一下,
1.用引用来调用它的析构函数.
2.当常引用绑定到临时对象时,临时对象的生命周期被延长.
------解决方案--------------------
可以先干掉它obj.~obj();然后又初始化它obj.obj();
不知道怎么纠结这个问题!比如下面这段代码:
- C/C++ code
#include <iostream> using namespace std; class A{ public: ~A(){ cout<<"Destructor"<<endl; } }; void fun(A & ra){ } int main(){ A a; fun(a); return 0; }
如果引用有生命周期的话,在fun函数中,作为区域变量的ra在生命周期结束也就是函数调用结束的时候会调用类A的析构函数,而在主函数main中,在主函数结束的时候a也会调用其析构函数,由于引用ra和a指向的是同一段内存,就会造成内存的多次释放,但是貌似又没有!怎么解释??
------解决方案--------------------
1.引用不是对象, 生命周期是属于对象的, 引用没有生命周期.
2.对象的析构函数的调用跟它的引用没有关系
------解决方案--------------------
第2点还是要补充一下,
1.用引用来调用它的析构函数.
2.当常引用绑定到临时对象时,临时对象的生命周期被延长.
------解决方案--------------------
可以先干掉它obj.~obj();然后又初始化它obj.obj();