gpt4 book ai didi

c++ - 具有替换自由方法的结构的 scoped_ptr

转载 作者:太空狗 更新时间:2023-10-29 21:08:19 25 4
gpt4 key购买 nike

我有一个结构

typedef struct myStruct_st
{
int a;
}myStruct;

可以使用

创建
myStruct * myStruct_new()
{
printf("Allocate\n");
return new myStruct;
}

并使用删除

static void myStruct_free(myStruct * ptr)
{
printf("Deallocate\n");
delete ptr;
}

我希望为结构分配的内存自动释放

为此,我写了一个模板

template <class T>
class scoped_del
{
public:
scoped_del(T * p, void (*mfree)(T *)) :
p_(p),
mfree_(mfree)
{
}

~scoped_del()
{
mfree_(p_);
}

private:

T * p_;

void (*mfree_)(T *);
};

然后像那样使用它

int main()
{
myStruct * st = myStruct_new();

class scoped_del<myStruct> ptr_st(st, myStruct_free);

return 0;
}

如何使用 STL 或 boost 使其成为更标准的方式?

最佳答案

Boost 的 shared_ptr 用几乎相同的代码做几乎相同的事情。

#include <boost/shared_ptr.hpp>

main() {
boost::sshared_ptr<myStruct> ptr_st(myStruct_new(), myStruct_free);

ptr_st->a = 11;
}

但是您应该考虑是要编写 C++ 代码还是 C 代码。您正在使用一些非常 C 风格的语法(typdef struct,声明前面的 class,使用“新函数”而不是构造函数,使用“自由函数” "而不是析构函数),但是你标记了这个 C++ 并且很明显你正在使用一些 C++ 特性。如果您想使用 C++,请使用它的所有功能,如果您不想这样做,请坚持使用 C。将两者混合太多会给任何试图弄清楚您的代码的人造成很多困惑(以及您的“设计决策”)。

关于c++ - 具有替换自由方法的结构的 scoped_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3263854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com