C++初始化对象并分配内存

C++ initializing object and allocating memory

本文关键字:分配 内存 对象 初始化 C++      更新时间:2023-10-16

我有一个这样的结构:

struct myNode{
    Node node; // node object takes just name parameter I mean node(string name);
    int value;
};

在我的main()函数中,我有一个结构myNode指针,我想首先读取一个文件以获取节点对象和值的名称(只是一个整数),然后创建相应的结构体myNode。为此,我写

int main(){
    struct myNode * myRoot;
    ifstream myfile (fileName);
    string line;
    getline(myfile,line);
int value=getValue(line);
myRoot= new myNode();
    myRoot->value=value;
myRoot->node=node a(line);
  return 0;    
}
但是,我不确定,这是

正确的方法还是不正确的,有人可以帮助我吗?

是的,它可以工作,除非:

  1. 您忘记在函数主退出之前删除 myRoot。是的,操作系统可以在程序退出时回收它,但你可以使代码更优雅。
  2. 如果结构 Node 的构造函数可以将 line 作为唯一的参数,则myRoot->node= node a(line)可以只是myRoot->node = Node(line)myRoot->node = line。我想您将 a 视为 Node 的临时实例。

在你的代码中的许多致命问题中,我看到给你带来最多麻烦的是这一行的问题:

myRoot->node = node a(line);

node a(line)部分是语法错误。我相信你的意思是:

myRoot->node = node(line);

或者,如果Node没有explicit构造函数:

myRoot->node = line;

其他致命的问题是,您正在使用指针,使用new进行分配(两者都是不必要的选项),并且您正在对文件流执行提取而不检查它是否有效。所有这些事情都可以通过在堆栈上分配对象并检查输入是否成功来解决:

int main()
{
    myNode myRoot;
    ifstream myfile(fileName);
    string line;
    if (getline(myfile, line))
    {
        int value = getValue(line);
        myRoot.value = value;
        myRoot.node  = line;
    }    
}