Visual Studio 2013 C ++类属性初始化问题

时间:2014-10-10 14:09:35

标签: c++ visual-studio-2010 class constructor visual-studio-2013

有人可以解释一下这段代码的用途。

class Point
{
private:

    int x;
    int y;

public:
    Point(){}
    void print(){
        cout << x << " " << y  << endl;
    }
};

int main()
{
    Point p;
    p.print();

    return 0;
}

如果我运行此代码,则输出为-858993460 -858993460对我来说是正常的。这是垃圾,因为我没有初始化我的2个属性。

这是奇怪的事情......

class Point
{
private:

    int x;
    int y;
    int* buf;
public:
    Point(){}
    void print(){
        cout << x << " " << y  << " " << buf << endl;
    }
};

int main()
{
    Point p;
    p.print();

    return 0;
}

现在,我将int * buf作为新的类成员,当我运行此代码时,我的所有属性都被初始化为零。输出为0 0 00000000.我使用Visual Studio 2013,我不认为这种行为发生在Visual Studio 2010中。

有人可以解释背后的逻辑吗?

2 个答案:

答案 0 :(得分:1)

您的班级成员永远不会被初始化为零,您需要在构造函数中自己执行此操作

class Point
{
private:

    int x;
    int y;

public:
    Point():x(0), y(0) {}
    void print(){
        cout << x << " " << y  << endl;
    }
};

如果你的第二个例子中它们为零,那么它就是纯粹的巧合

答案 1 :(得分:0)

当您打印这些intint*时,您正在打印分配这些内容之前的内存中的垃圾数据。请注意,您打印的buf所持的地址不是指向它的值。打印*buf可能会给您一个段错误。

二进制的

-858993460是:11001100110011001100110011001100

这可能是Visual Studio 2010中的调试器默认内存位置,以警告您正在读取错误数据。

就2010年和2013年之间的差异而言,您可能不再在调试中运行,或者您在2013年的默认调试块写入仅为0。