C++初始化对象并分配内存
C++ initializing object and allocating memory
我有一个这样的结构:
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;
}
但是,我不确定,这是正确的方法还是不正确的,有人可以帮助我吗?
是的,它可以工作,除非:
- 您忘记在函数主退出之前删除 myRoot。是的,操作系统可以在程序退出时回收它,但你可以使代码更优雅。
- 如果结构 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;
}
}
相关文章:
- 在c++中为我自己的基于指针的数组分配内存的正确方法
- 给定一个指向堆分配内存的指针,智能指针实现如何为其找到合适的释放函数?
- 如果 const 不分配内存,为什么我可以获取 const 的地址?
- 在函数中分配内存时出现问题
- 如何为 std::vector 分配内存,然后稍后为某些元素调用构造函数?
- constexpr new 如何分配内存?
- 在构造函数中分配内存失败是如何冒泡的
- LLVM 传递以在特定地址分配内存
- CudaMalloc 在分配内存时失败
- 为什么它在不分配内存的情况下工作正常
- 为什么在正确解除分配内存时出现内存泄漏?
- 如何通过 malloc 为队列数组分配内存?
- vector是否为std::移动的对象连续分配内存
- 删除类成员的动态分配内存的最佳方法是什么
- 唯一指针是否在堆或堆栈上分配内存?
- 如果不分配内存,我如何能够为变量创建和分配值?
- std::initializer_list 堆是否分配内存?
- 如何按顺序或在指定的地址分配内存?
- 是否可以使用 malloc 为类对象分配内存?
- 迭代器是否分配内存(如指针)?