【发布时间】:2012-07-25 23:43:25
【问题描述】:
我想创建一个 Auto_Ptr 到旧版 C struct; 我只有头文件和静态库,所以我无法修改源代码。我想知道如果我调用p.release() 或p.reset(),auto_ptr 会不会自动尝试调用Destructor ~foo()? C struct 不存在此析构函数。我目前的解决方案是编写一个 C++ 包装类
析构函数接口(在内部它使用库特定的 C 方法来释放内存并销毁其他资源)。有更好的方法吗?还是Boost等已经解决了这个问题?
【问题讨论】:
-
请记住,在 C++ 中,
struct和class之间的唯一区别是members are by defaultpublic` 在struct中,而private在class中。这意味着您可以在struct中拥有成员函数,就像在class中一样,包括构造函数/析构函数。如果您没有任何构造函数/析构函数,C++ 编译器将添加默认构造函数/析构函数。 -
我知道这一点——在我的情况下,C++ 不可能在自动生成的析构函数中做正确的事情。我可以编辑头文件并添加函数,但这不是一个干净的解决方案,因为对于系统头的每个新版本,我都必须再次进行修改。不过,使用 C++ 包装器听起来像是一个好的解决方案吗?
标签: c++ memory destructor auto-ptr