【发布时间】:2023-09-08 09:57:01
【问题描述】:
我必须实现一个看起来像这样的函数:
MyList * sum (MyList * l1, MyList * l2) {
MyList * newlist = new MyList();
//Adds two objects and place the result in a third new list
return newlist;
}
该函数获取两个列表并将每个对象的总和放入一个新列表中。 MyList 类的节点带有指向 next 变量的指针,并且列表中的对象是用户定义的。
这让我开始思考——我应该如何处理对象和列表本身的内存动态分配?因为我必须为新列表的每个对象创建内存。
有什么方法可以将对象总和的值放入新列表中,而不必依赖动态分配?也许通过这样做:
Object result(node1->content + node2->content);
Node->content = &result; // will this object be erased when the function ends?
而不是这个:
Node->content = new Object(node1->content + node2->content);
我应该如何处理函数内部创建的新列表的生命周期与函数结束后将保存内存的变量相关?返回新列表时我可以这样做吗?
MyList & sum (MyList * l1, MyList * l2) {
//Create variable without allocating memory and return it's reference
}
简而言之,我的主要疑问是如何处理在函数内部创建并由其他对象持有的对象的生命周期。
【问题讨论】:
-
你考虑过
std::shared_ptr/std::unique_ptr吗? -
使用
std::list。std::list自动为您管理内存。 -
呃,为什么会有人坚持那个函数签名......
-
我还不知道如何使用智能指针。我会调查的。我已经在我的实现中使用了 std::list 并且我知道这些建议不是在您不需要时处理指针。我只是想了解对象内部变量的生命周期,而不是假装重新实现 std::list。感谢您的回答。
标签: c++ pointers memory-management dynamic-allocation dangling-pointer