use*_*536 1 c++ constructor memory-management shared-ptr
我正在使用 tr1 shared_ptr (工作尚未更新到 C++0x 或 C++11),并且我需要将 std::tr1::shared_ptr 与具有自定义分配器和删除器的类 Foo 一起使用。
目前 Foo 通过以下代码分配/释放:
void createFoo(Foo** mem) {
*mem = (Foo *) malloc(sizeof(Foo));
memset(*mem, 0, sizeof(Foo));
}
Run Code Online (Sandbox Code Playgroud)
和
void deleteFoo(Foo* mem) {
// code to call recursive methods to delete Foo substructures
memset(...)
}
Run Code Online (Sandbox Code Playgroud)
如何声明std::tr1::shared_ptr<Foo>使用 createFoo 和 deleteFoo ?
如果您无法更改createFoo(这会更好),那么您将需要包装createFoo以隐藏该双指针:
#include <memory>
struct Foo {};
void createFoo(Foo **p) { *p = new Foo; }
void deleteFoo(Foo *p) { delete p; }
std::shared_ptr<Foo> wrapCreateFoo() {
Foo *p = NULL;
createFoo(&p);
return std::shared_ptr<Foo>(p, deleteFoo);
}
int main() {
std::shared_ptr<Foo> f = wrapCreateFoo();
}
Run Code Online (Sandbox Code Playgroud)
我在一个地方完成了这一切,因为wrapCreateFoo返回 ashared_ptr使得更难忘记设置正确的删除器功能。
shared_ptr我在示例中使用了 C++11 标头/命名空间,但它对于 TR1/Boost 情况是相同的。
| 归档时间: |
|
| 查看次数: |
2741 次 |
| 最近记录: |