c – 如果std :: vector元素’自杀’会发生什么(使用delete this
假设有一个项目向量
vector<Item*> items; //{item1,item2,item3} 然后,在代码的其他部分, items[1]->suicide(); 自杀职能是: void Item::suicide() { delete this; } 什么是项目矢量大小以及它现在的排列方式? 编辑(我可以问一个额外的问题吗?):如果输出的所需排列是{item1,item3},大小是2,没有悬空指针,如何以自毁方式(从item2本身)进行操作? 编辑2:谢谢你的所有答案!真棒.所以我最终决定并找到了从对象外部做到这一点的方法,因为这是一种不好的做法而且不必要地复杂化 解决方法
什么是项目矢量大小以及它现在的排列方式?相同.函数调用根本不会改变矢量内容或大小.它只是释放指针指向的内存.
这样做可以吗?更准确地说:这是合法的C吗?是.这是好的风格编程吗?不,请允许我详细说明后者: >应该分开关注点:谁负责内存管理?类Item或类Item本身的容器或用户? 底线:不提供自杀功能().而是将责任完全交给调用代码.使用标准库容器和智能指针来管理内存. 编辑:关于编辑中的问题.写吧 items.erase( items.begin() + 1 ); 这适用于所有类型:std ::值的向量或指针.您可以找到std :: vector和C标准库here的良好文档. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |