C++对象生存范围
C++ object life scope
我似乎误解了 c++ 中对象的生命范围。如果您考虑以下几点:
class MyClass{
public:
int classValue;
MyClass(int value){
classValue = value;
}
static MyClass getMyClass(int value){
MyClass m1 = MyClass(value);
return m1;
}
};
int main() {
MyClass m1 = MyClass(3);
cout << m1.classValue << endl;
m1 = MyClass::getMyClass(4);
cout << m1.classValue << endl;
return 0;
}
这输出:
3
4
我想,当 m1 获得一个非动态对象时,该对象已在 getMyClass 函数的"堆栈"上创建,我试图从中获取值是行不通的,因为该对象将死亡。有人可以开导我吗?不要饶恕我任何细节!
我想,当 m1 获得一个非动态对象时,该对象已在 getMyClass 函数的"堆栈"上创建,我试图从中获取值是行不通的,因为该对象将死亡。有人可以开导我吗?不要饶恕我任何细节!
有一点误会。
是的,对象是在 getMyClass
的堆栈上创建的。
是的,当函数返回时,对象已失效。
但是,该行:
m1 = MyClass::getMyClass(4);
在对象失效之前将函数的返回值分配给m1
。对象的生存期足够长,以允许运行时完成分配。
顺便说一句,这条线
MyClass m1;
是不对的,因为MyClass
没有默认构造函数。您可以替换线条
MyClass m1;
m1.value = 3;
仅凭一个衬垫
MyClass m1(3);
更新
您需要更改 MyClass
的构造函数。
MyClass(int value){
value = value; // This does not initialize the
// member variable of the class.
// The argument shadows the member variable.
}
用:
MyClass(int valueIn) : value(valueIn) {}
相关文章:
- 关于:C++中异常对象的范围:为什么我没有得到副本?
- 超出范围时使用对象
- 如何访问超出其块范围的对象?
- 在函数内创建的对象的范围 - 如果在函数外部存储和访问引用,它们是否有效?
- C++:返回一个基于范围 for 循环迭代器,其中包含继承对象
- 对象超出范围/转让所有权
- 从函数返回范围视图时,带有std::span:中间对象所有权的C++Ranges-v3
- 读取互斥对象范围之外的volatile变量,而不是std::atomic
- 是否可以在C++ (C) 中使用全局范围对象(结构)?
- 基于范围的 for 循环将对象移动到另一个容器中?
- 对象超出范围后,引用成员设置为 0
- 哪个函数负责C++全局范围内的类对象初始化?
- 非常量对象的向量似乎在基于范围的 for 循环中被视为常量
- 如果一个对象是在本地创建的,并在C++中作为异常抛出,那么本地对象如何在其范围之外有效,即在 catch 块中?
- 是否有一种方法可以根据派生的可能性值范围限制对象参数
- 类对象未在范围中声明
- 如何打印出唯一指针对象向量中的值(基于范围的循环)?C++
- 基于范围的 for 循环,用于包含C++中的指针的自定义链表,仅返回对象
- 带有GCC的C++11中的线程范围对象
- C++ / GCC - 未调用文件范围对象的构造函数