在构造函数中初始化指针的正确方法
Right way to initialize a pointer in a constructor
我有以下练习:
添加代码使其正常运行
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.
是否有一种简洁的方法来回答这个问题?
我在您的原始问题声明中没有看到任何要求将指针初始化为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;
};
另一种说法:
MyInt(int x) : MyValue(new int(x)) {}
不需要额外的成员。但是,必须确保在析构函数中释放了内存。
~MyInt() { delete MyValue; }
我不太确定为什么要在类中存储指向int
的指针,而不是直接存储值(并且不是有指针作为构造函数的输入),但假设您确实想要这样做,以下是您将如何做到的:
MyInt(int x):MyValue(new int(x)){}
但是这是非常非常糟糕的风格,你必须有一个很好的理由这样做。您还需要记住在类销毁时释放指针:
~MyInt(){delete MyValue;}
相关文章:
- 将一个类的方法指针存储到另一个类中
- 如何调用返回类方法指针的类方法
- 通过reinterpret_casting方法指针从指针调用派生类的方法。这是 UB 吗?
- 泛型方法指针.reinterpret_cast指向不同类的方法指针,这是 UB 吗?
- C++;类方法指针;λ;将 lambda 作为成员函数指针传递;
- 使用模板、方法指针和字符串键入推导
- 将方法指针作为整数参数发送到C#的C 方法
- 从C 中的VTable获取方法指针
- 模板化方法指针 - 无法匹配函数参数的指针
- 获取特定的模板重载方法指针
- 如何将方法指针声明为Typedef方法参数
- 如何将方法指针类型转换为函数指针类型
- 如何在使用 pthreads 时将方法指针作为函数参数传递C++
- 方法指针映射,编译器说他们不接受任何参数
- C# 方法指针,如 C++ 中的指针
- c++创建新的LinkedList类:Clear()方法指针被释放未分配
- 尝试获取类方法指针时出现E_NOINTERFACE
- 传递和强制转换方法指针
- 常量方法指针的类型是什么
- 将对象的方法指针传递给接受 [静态方法指针/全局函数] 指针的函数