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

时间:2013-12-27 09:29:25

标签: c++ class oop

我有一个结构:

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

在我的main()函数中,我有一个struct myNode指针,我想先读取一个文件来获取node对象的名称和值(只是一个整数)然后创建我对应的struct 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;    
}

然而,我不确定,这是否正确,是否有人帮助我?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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;
    }    
}
相关问题