我在这个网站上看过类似的书名,但仍然找不到答案。所以也许有人可以为我澄清一下。

可以说我有:

// Example class
class CFirst
{
 public:
    CFirst{ }
    virtual ~CFirst{ }
    int i;
    float y;
};

// Other class methods looks like this
.........
CFirst *data = new CFirst();
data->i = 10;
data->y = 10.10;

if (data != NULL)
{
    delete data;
    data = NULL;
}

CFirst *data1 = new CFirst();
std::cout<<data1->i<<std::endl;
............

现在问什么。 data1-> i显示10。
那怎么可能..
PS:这只是一个例子。

谢谢你的指教。

最佳答案

data1->i

未初始化,它可以显示任何相关值。
CFirst *data = new CFirst();
data->i = 10;
data->y = 10.10;

当对data执行上述步骤时,您在动态内存区域(堆/免费存储)上创建了一个新的CFirst对象,并为i对象的成员yCFirst分配了值。

对于data对象,您刚刚通过以下方式在动态内存区域中创建了该对象:
CFirst *data1 = new CFirst();

您没有初始化它们,未初始化的变量可以包含任何有效数字甚至是垃圾值,只是data->i包含10,请注意,没有特定的原因它包含10,它可以包含任何内容。

使用UnInitialized成员变量是一个坏主意,理想情况下,应该在初始化程序列表中初始化成员变量。
CFirst(int p, float q):i(p),y(q)
{

}

关于c++ - 一类,两个对象和类数据的奇怪行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6478047/

10-11 23:00
查看更多