当前位置: 首页 > 知识库问答 >
问题:

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

杨俊茂
2023-03-14

我有以下练习:

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

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个答案

薛浩言
2023-03-14

我不太清楚为什么要在类中存储指向int的指针,而不是直接存储值(并且不让指针作为构造函数的输入),但假设您确实需要,下面是您的方法:

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

但这是一种非常非常糟糕的风格,你必须有充分的理由这样做。您还需要记住在类销毁时释放指针:

~MyInt(){delete MyValue;}
漆雕兴平
2023-03-14

另一种方式:

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

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

~MyInt() { delete MyValue; }
邴英毅
2023-03-14

在您最初的问题陈述中,我没有看到任何要求将指针初始化为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;
};
 类似资料:
  • 我试图包装两个C++类:Cluster和ClusterTree。ClusterTree有一个方法get_current_cluster(),它实例化一个集群对象,并返回对它的引用。ClusterTree拥有集群对象,并在C++中管理其创建和删除。 我用cython包装了Cluster,生成了PyCluster。 PyCluster应该有两种创建方式: 1)通过传入两个数组,这意味着Python应该

  • 问题内容: 在Java中,但是在其他OO语言中,初始化属性定义之间也有区别,例如 并使用构造函数对其进行初始化? 我想不出任何实际的区别,有没有?否则,即使结果相同,是否存在一种方法优于另一种方法的情况? 问题答案: 初始化顺序在这里很重要。 将字段设置为默认初始值(0,false,null) 调用对象的构造函数(但不要执行构造函数的主体) 调用超类的构造函数 使用初始化程序和初始化块初始化字段

  • 问题内容: 另一个链接的问题是在使用strcpy()时出现细分错误吗? 我有一个结构: 如何初始化指向上述类型结构的指针,以及如何初始化指向结构内部的10个字符串(incall [])的指针。 我首先初始化字符串,然后初始化结构。 谢谢。 编辑:我猜我用错了字,应该说分配。实际上,我将此结构作为线程的参数传递。线程数不是固定的,作为参数发送的数据结构对于每个线程都必须是唯一的,并且是“线程安全的”

  • 问题内容: 初始化有序词典(OD)以便保留初始数据顺序的正确方法是什么? 题: 在初始化时是否会保留元组列表的顺序,元组的元组或列表的元组或列表的列表等的顺序(上述第二和第三示例)? 如何验证是否实际维持订单?由于a具有不可预测的顺序,如果我的测试向量幸运地具有与dict不可预测的顺序相同的初始顺序,该怎么办?例如,如果不是我写,我会错误地得出结论认为该顺序已保留。在这种情况下,我发现a是按字母顺

  • 我想在构造函数中初始化二维数组。但是,我在类中声明数组的实例变量时遇到了一个问题。如果我这样做就错了: 我怎么解决这个问题?

  • 问题内容: 用RefluxJS异步初始化数据的正确方法是什么?是否有类似于AngularJS的解决方案,或者Flux的实现与此无关(路由器应该处理此职责)? 问题答案: 在应用程序的顶级组件中,使用方法(docs)触发获取数据的操作。最初渲染组件时将调用此方法。 例如: