我有以下练习:
添加代码以使其正常运行。
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。
是否有一种干净利落的方式来回答这个练习?
答案 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;}