【发布时间】:2014-11-29 18:58:17
【问题描述】:
编辑我不需要解决问题,我想知道是否以及为什么我应该更喜欢一件事而不是另一件事。函数声明不能更改。
我有一个 C++ 项目,我需要编写一些代码,这些代码将由用 C 编写的代码调用。我有一个名为 A 的类,我需要实现一个方法来销毁由new,并使指针本身无效。
声明如下:
void destroy_A(void** a);
我需要一个void**,这样我就可以取消*a。
我应该使用以下哪一项(如果有),为什么?
delete *(A**)a;
delete *((A**)a);
delete (A*)*a;
编辑:也许我不清楚:我不知道技术术语,但我确实使用delete而不是free,并且实际方法是通过用 C 编译的代码调用的。否则,我不需要 void**。
这是我的 CS 教员要求,作业不是我写的 :)
【问题讨论】:
-
实际使用的
new语句是什么?通常不需要任何演员表。您可能需要区分new()和new[]以及它们对应的delete和delete[]调用。 -
首先,不要将指针归零。它不会为您买任何东西,并使您的界面复杂化。以及为什么需要强制转换,最好为 C 使用不透明类型(又名
A的前向声明为struct)。 -
@Deduplicator:什么?删除指针后将其归零是常见的做法。它消除了悬空指针。
-
@LightnessRacesinOrbit:不在您作为基本构建块提供的接口功能中。
free和delete都没有这样做是有原因的。 -
@Deduplicator:OP 试图创建的这个函数既不是
free也不是delete。它是它们的包装,不是“基本构建块”。显然,需要额外的功能。为什么不将该功能作为您在呼叫站点上的唯一附加功能?
标签: c++ c pointers casting void