【发布时间】:2021-03-25 04:58:29
【问题描述】:
我正在处理具有关联的 new_ 和 free_ 方法的 C 类型。
new_ 的类型签名可能会有所不同,但 free_ 始终是 void free_something(something*);
目前,我以这种方式声明我的unique_ptrs,这似乎过于冗长:
std::unique_ptr<qdr_link_t, decltype(&free_qdr_link_t)> link{new_qdr_link_t(), free_qdr_link_t};
我可以用更少的仪式来做这件事吗?当我的释放器是std::free() 函数时,我看到了一个巧妙的解决方案,位于https://stackoverflow.com/a/43626234/1047788。我试图创建一个可以参数化释放器的版本,但我没有用它。
我能想到的最好的办法是根据上述声明创建一个宏。
【问题讨论】:
-
我有多种这样的类型,对于每种类型,我都有一个
type * new_type(...)和void free_type(void)。所以是的。没有多个new_名称相同但签名不同,因为它们都在 C 中声明并且不允许重载。 -
void free_type(void)怎么知道要释放什么?要释放的东西是否存储在全局中? -
傻了,free_函数的签名是
void free_type(*type)。很抱歉之前弄错了。
标签: c++ c++11 unique-ptr