【发布时间】:2011-07-12 00:11:08
【问题描述】:
假设在第 3 方库中有这样一个函数:
rttype func(...);
如何编写一个功能相同但不同之处在于其返回类型是rttype * 而不是rttype 的包装函数?
【问题讨论】:
-
我尝试的是,我不能简单地通过
&ret来完成它,因为它在函数退出后超出了范围。
标签: c
假设在第 3 方库中有这样一个函数:
rttype func(...);
如何编写一个功能相同但不同之处在于其返回类型是rttype * 而不是rttype 的包装函数?
【问题讨论】:
&ret 来完成它,因为它在函数退出后超出了范围。
标签: c
一般来说,你不会。有时朝另一个方向走可能是合理的,但在您返回指针的那一刻,您就会引入生命周期和所有权问题。特别是,你要返回一个指向什么的指针,释放它指向的内存是谁的责任(如果有的话)?
这些问题通常会影响整体设计,因此您无法在一个简单的包装器中合理地解决它们。
【讨论】:
您将必须分配全局内存(堆上的内存),在那里分配 rttype,然后返回一个指向已分配内存的指针。当然,这样做你以后也必须处理释放内存的问题。
但是,这样做是在修改函数的语义和设计,您应该牢记这一点,并负责任地进行其他更改以尊重这一点。
【讨论】: