|
|
1
4
是的,你需要
当你做完了你需要打电话
你可以使用
你可以看看 boost::shared_ptr 如果不想手动执行这些删除调用。 |
|
|
2
3
如其他回复中所述,您需要循环遍历列表并删除每个元素。如果调用clear,它只会从列表中移除未指向对象的指针。 如果您需要一个包含所有权概念的列表,您可以使用 boost pointer container . 它将确保当您销毁列表时销毁您的对象 |
|
|
3
2
假设您没有在其他地方维护工作项列表,那么是的,您需要在删除工作项本身之前逐个删除它们(从而丢失引用)。如果工人持有唯一的列表,那么解构器就和任何解构器一样好(否则,在调用工人本身的delete之前,您需要“手动”删除每个工作项) 但是,如果工作项引用存在于其他地方,则可以选择适当的时间删除它们,这可能是删除工作项时的时间,也可能不是。 |
|
|
4
2
正如其他人所说,你需要一个
|
|
|
5
1
它实际上取决于所有权,这是您在构建接口时需要决定的。假设你有一个方法:
您需要指定谁拥有内存,因此谁应该删除它。取决于您尝试做什么,呼叫方拥有它(比如项目是否应该在cWorkers之间定期共享)或cWorker拥有它(如果每个cWorkitem属于单个cWorker)都是有意义的。不管谁拥有它都要负责删除它。 在前一种情况下,您可以将工作项作为共享项,以指定工作人员之间共享的所有权,而不需要手动删除。在后一种情况下,还可以使用 ptr_vector 为了避免手动删除的需要,您还应该注意正在控制内存的函数。 另外,请注意,delete是空安全的,因此不需要那些if语句,而且pop_back()比pop_front()更快 |
|
6
1
使用boost shared_ptr(这将很快成为标准)
现在当列表被删除时,工作项将被删除。您可以在代码中传递工作诱惑者,而不必担心它们。 |
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |