这个C ++析构函数是多余的吗?

西蒙

我收到了一些定义如下的各种结构的C ++代码:

typedef struct _someStruct_ {
   std::string someString; 
   std::vector<std::string> someVectorOfStrings;
   int  someOtherStuff;

   ~_someStruct_()
   {
      someString.clear();
      someVectorOfStrings.clear(); 
   }
} someStruct; 

这里的析构函数是完全多余的吗-如果要通过默认的析构函数对结构进行破坏,则无论如何不会破坏任何字符串,向量等?

如果我编写了代码,就不会在这里添加显式析构函数的想法-我只是让编译器继续进行下去。

据我了解,唯一可能需要在结构中创建自己的析构函数的情况是,结构的任何成员是否包含指向可能需要清除的数据的指针,或者是否具有某些其他功能(例如,用于调试,需要删除一个结构)。

我在这里遗漏了什么吗-为何在析构函数中明确清除了字符串和向量?我的怀疑是发给我这封信的人实际上是一位C程序员(请参阅typedef),他试图将一些C代码转换为C ++。

康拉德·鲁道夫

是的,析构函数是完全多余的。

正如您自己说的那样,代码还有其他警告标志。typedef struct例如,在C ++中使用毫无意义,它与空析构函数一样多余:该代码是由对C ++不太了解的人编写的,肯定会有更多的陷阱(一方面,类名无效是因为全球范围内领先的下划线)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章