gpt4 book ai didi

c++ - 是否可以将 "delete"放在逗号表达式中

转载 作者:太空宇宙 更新时间:2023-11-04 05:14:04 25 4
gpt4 key购买 nike

我想返回指针引用的结构中的一些 Material ,然后删除该结构。

在Java中,只要返回值,垃圾回收系统就会自动删除结构。

但是在C++中,我能想象的方式不是很干净,就是用一个临时变量来存储返回的东西,删除指针,然后返回存储的值。

我尝试了另一种棘手的方法,使用逗号表达式作为“return ptr->value, delete ptr”,但出现编译错误“void value not ignored as it should be”。

有没有可能更优雅地实现这一点?

非常感谢。


已更新

非常感谢大家的建议。事实上,我的问题的最初动机是关于我想用于一些较短代码的逗号表达式。我发现讨论更多的是关于 C++ 中指针的使用。这也是另一个非常有趣的话题。

我使用 C 多年,所以我对原始指针比较熟悉,对智能指针的经验很少。我的第一个想法是,有两个基本条件需要指点。一个是引用在堆中分配的一大块内存,另一个是用于动态分配,例如链接列表节点或树节点(例如,我最初的问题是在编写类似 BST 的结构时出现的)。

那么在C++编程中,对于这两种情况,智能指针都是最好的选择吗?如果我们考虑效率,例如在一些低级库上工作,是否可以将原始指针完全封装在类中以降低内存泄漏风险?

最佳答案

当然。不要使用指针,如果必须使用智能指针(std::shared_ptrstd::unique_ptr)。

在你的情况下,它可以很简单

//...
return obj.value; //no pointer needed
//automatic memory management

//...
return smartPtr->value; //smart pointer automatically cleans up after itself

您可能无法想象在 C++ 中以干净的方式进行操作,因为 C++ 是作为 C 来教授的,存在指针和内存管理问题。正确的 C++ 使用 RAII 并且不会受到影响。

关于c++ - 是否可以将 "delete"放在逗号表达式中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14091506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com