指向未由对象地址初始化的对象的指针如何将值分配给类的数据成员
How a pointer to an object which is not initialized by an address of object assign value to data member of class?
声明未初始化时指向对象的指针,它指向某个垃圾位置。如果使用相同的指针初始化任何数据成员,则数据成员在没有对象的情况下存在在哪里。因为对象可以有数据成员,而不是指向对象的未初始化指针。
我尝试在初始化其数据成员之前/之后打印未初始化的"指向对象的指针"的值。该值保持不变,这意味着他们仍然没有创建对象,并且指针指向任何垃圾值。
#include <iostream>
using namespace std;
class play {
public:
int runs;
};
int main() {
play *batsman; // Not initialized
cout<<batsman<<endl; // "0" means pointing to any garbage location
batsman ->runs = 10; // Which object's data member "runs" is been initialized?
cout<<batsman<<endl; // "0" still points to some garbage location
play obj;
batsman = &obj; // Initializing the pointer
cout<<batsman<<endl; // 0x7ffe76256e60
return 0;
}
我预计,如果指向对象的指针没有使用对象的任何地址进行初始化,那么它如何初始化或将值分配给类的数据成员。尝试将值分配给不属于任何对象的数据成员应该是运行时错误。
这应该是运行时错误。这是错误的,当你违反C++规则时,它通常是未定义的行为。未定义的行为意味着任何事情都可能发生,这并不意味着必须有错误,这并不意味着它不会"工作"。
未定义的行为是使编程C++困难的原因之一,因为当您的程序有错误时,它们的行为是不可预测的。未定义行为的优点是,这意味着编译器可以生成非常快的代码,因为它不必检查垃圾指针之类的东西,它只是假设所有指针都是有效的。
相关文章:
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 使用指针访问数组中的对象数据成员
- 访问数据成员(本身是对象)的数据成员,就好像它们是类成员一样
- 有没有办法在C++中循环访问对象的不同数据成员
- "Class1"类"Class2"对象作为私有数据成员。如何通过"Class 2"函数引用"Class1"对象?
- 如何使用数据成员填充派生类的对象到基类的指针数组中
- 如何在C++中使用类对象访问指针数据成员
- 如何高效更改向量中所有对象的成员数据?
- C++中的常量对象或私有/常量数据成员(变量)?
- 指向未由对象地址初始化的对象的指针如何将值分配给类的数据成员
- 通过向量中的对象的数据成员迭代
- 继承的类对象如何使用私有数据成员
- 我如何在参考上使用数据成员而不使用新关键字创建对象
- 从R中访问C 对象数据成员
- 静态数据成员是否在所有类对象之前初始化?
- 通过指向对象数据成员的指针更改该对象的值
- C .更改对象数据成员的数据成员
- 排序类对象数据成员从大到小
- 如何设置对象数据成员与这个c++与这个
- 按对象数据成员属性搜索对象的向量