【发布时间】:2011-11-17 02:57:51
【问题描述】:
在 C++ 工作了 15 年之后,我发现我并不完全理解引用...
类测试类 { 民众: 测试类():m_nData(0) { } 测试类(int n):m_nData(n) { } ~TestClass() { cout我从这个测试中了解到,TestClass 实例是在堆栈上创建的(这是正确的吗?)并由第一个 TestClass 构造函数初始化。什么时候分配这个实例:什么时候加载主函数,或者执行引用赋值?什么时候销毁?
第二次引用赋值后对象地址不变。这是否意味着析构函数和构造函数应用于同一个内存区域?或者内存被释放(动态?在堆栈上?)并再次分配?
我对堆栈和堆分配对象的生命周期、它们的构造函数和析构函数了如指掌。但我无法理解这个程序到底发生了什么。
编辑: 谢谢大家。我试图在这个测试中重现一些其他(更复杂的)程序行为。您的 cmets 帮助我理解了我的错误和我正在与之抗争的另一个程序......
固定代码为:
主函数() { cout【问题讨论】:
-
此代码无法编译。您不能将非常量引用绑定到临时对象。
-
是否有任何不将自动对象放入堆栈的 C++ 实现?如果有,它们是哪些?
-
你用哪个编译器来编译它?它不应该编译。
-
@Jeremy:没有,这在逻辑上是不可能的。令人费解的是,那些宣传城市神话的人不都是白痴。我无法解释他们为什么这样做,除了可能就像那个因与人行道发生性关系而被判刑的苏格兰人一样,这只是莫名其妙的行为。
-
请保持 cmets 具有建设性和主题性。