【问题标题】:Auto_ptr to external C structAuto_ptr 到外部 C 结构
【发布时间】:2012-07-25 23:43:25
【问题描述】:

我想创建一个 Auto_Ptr 到旧版 C struct; 我只有头文件和静态库,所以我无法修改源代码。我想知道如果我调用p.release()p.reset()auto_ptr 会不会自动尝试调用Destructor ~foo()? C struct 不存在此析构函数。我目前的解决方案是编写一个 C++ 包装类 析构函数接口(在内部它使用库特定的 C 方法来释放内存并销毁其他资源)。有更好的方法吗?还是Boost等已经解决了这个问题?

【问题讨论】:

  • 请记住,在 C++ 中,structclass 之间的唯一区别是 members are by default public` 在 struct 中,而 privateclass 中。这意味着您可以在 struct 中拥有成员函数,就像在 class 中一样,包括构造函数/析构函数。如果您没有任何构造函数/析构函数,C++ 编译器将添加默认构造函数/析构函数。
  • 我知道这一点——在我的情况下,C++ 不可能在自动生成的析构函数中做正确的事情。我可以编辑头文件并添加函数,但这不是一个干净的解决方案,因为对于系统头的每个新版本,我都必须再次进行修改。不过,使用 C++ 包装器听起来像是一个好的解决方案吗?

标签: c++ memory destructor auto-ptr


【解决方案1】:

用 c++ 编译时仍然存在隐式析构函数,所以没问题。如果结构体分配了new,那就是。

【讨论】:

  • 另请注意,auto_ptr 已被弃用,请考虑改用 unique_ptr。
  • 你怎么能给auto_ptr一个自定义删除器??
  • @Kerrek SB 我的错,你不能。正如你所看到的,它太不灵活了,因此被贬低了。相应地编辑了答案。
  • 由于可移植性原因,我不能使用 C++11;该库需要使用 GCC 4.3.2 编译
  • @MatthiasHueser 有 boost::unique_ptr 在 c++03 中工作
猜你喜欢
  • 2020-02-16
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
  • 2023-02-25
  • 2015-02-02
  • 2021-02-13
  • 1970-01-01
相关资源
最近更新 更多