在构造函数中初始化指针的正确方法

时间:2014-07-21 20:36:20

标签: c++ pointers constructor initialization

我有以下练习:

添加代码以使其正常运行。

class MyInt
{
public:

private:
    int* MyValue;
}

int main(int argc,char** argv)
{
 MyInt x(1);
 ...//a bit more code where the actual value of x is going to be used.
 return 0;
}

我添加了私人财产

int val;

和公共构造函数

Myint(int x)
{
    val = x;
    MyValue = &val;
}

我添加了int val作为构造函数将一个非临时对象的地址分配给MyVal的方法,如x。

是否有一种干净利落的方式来回答这个练习?

3 个答案:

答案 0 :(得分:3)

我在原始问题陈述中没有看到任何要求将指针初始化为int地址的内容。修复示例所需的最小代码是添加一个带int的构造函数,并将MyValue初始化为nullptr

class MyInt
{
public:
    MyInt(int) {}
private:
    int* MyValue = nullptr;
};

int main(int argc,char** argv)
{
 MyInt x(1);
 return 0;
}

如果您的编译器不支持C ++ 11那么

class MyInt
{
public:
    MyInt(int) : MyValue(NULL) {}
private:
    int* MyValue;
};

答案 1 :(得分:1)

另一种方式:

MyInt(int x) : MyValue(new int(x)) {}

这不需要额外的成员。但是,您必须确保在析构函数中释放内存。

~MyInt() { delete MyValue; }

答案 2 :(得分:1)

我不确定你为什么要在类中存储指向int的指针,而不是直接存储值(并且指针是构造函数的输入),但假设你真的想要它,这里是你如何做到的:

MyInt(int x):MyValue(new int(x)){}

但这是非常非常可怕的风格,你必须有充分的理由去做。你还需要记住在类破坏中释放指针:

~MyInt(){delete MyValue;}