通过构造函数初始化类中的指针

时间:2013-06-14 00:59:54

标签: c++ pointers

我想在其中创建一个带有指针成员的类,并在构造类的实例时初始化该指针,如下所示:

#include "stdafx.h"
#include <iostream>

class MyClass {
public:
    MyClass(int x): p(&x){}

    int getValueOfp() 
    {
        return *p;
    }

private:
    int* p;
};

int _tmain(int argc, _TCHAR* argv[])
{
    int x=5;
    MyClass obj1(x);
    std::cout<<obj1.getValueOfp();
    return 0;
}

问题在于,当我调用getValueOf()时,我得到的输出不是p应该指向的变量的值(在这种情况下为5,因为它应该是指着x)。我已经在网上搜索了这个问题的可能答案而没有任何运气,有人可以告诉我我在这里做错了什么吗? (正如您所见,我正在使用Visual Studio Express。)

1 个答案:

答案 0 :(得分:4)

MyClass(int x) : p(&x) {}

您的参数按值传递,因此将进行复制。此副本是一个临时值,将在构造函数体的末尾到期。因此,您不是使用实际参数的地址初始化p,而只是使用本地副本。稍后取消引用指针时,您将无法在其中找到实际值,因为此时整数将过期,即未定义行为。您需要通过引用传递您的参数,以便不执行副本:

MyClass(int& x) : p(&x) {}
//      ^^^^