gpt4 book ai didi

c++ - 将 shared_ptr 与来自 void* 的 typedef 的对象一起使用

转载 作者:行者123 更新时间:2023-11-30 02:29:00 26 4
gpt4 key购买 nike

我在移植一些使用智能指针的代码时遇到了一些问题。

旧代码..

shared_ptr<Foo> create_Foo();

其中 Foo 是通过函数在内部创建的

Foo* Foo::FooFactory;

所以我知道我们正在为 C++ 类/对象创建一个 Ptr,然后将该 ptr 传递给共享 Ptr 对象以创建一个共享 ptr,其中包含一个指向 Foo 类型对象的 ptr...

但是当我想创建一个智能 ptr 来保存一个类型定义为 void* 对象的对象时会发生什么?

例如。

typdef void* FOO_HANDLE
shared_ptr<FOO_HANDLE> create_foo();

像这样的内部工厂函数

FOO_HANDLE FooFactory();

基本上我对使用 typedef FOO_HANDLE 对象声明和创建 shared_ptr 对象感到困惑,它本质上是一个 void*!同样因为 FOO_HANDLE 是 C 对象的指针,它通过销毁方法 ala 被销毁,

FooDestory(FOO_HANDLE);

所以我想我还需要告诉 smart_prt 销毁对象的方法。

我开始认为在这里使用智能指针是错误的方法。但我想我会先在这里问...

  • 詹姆斯

最佳答案

A std::shared_ptr<void>可以装void* .当你构建这样一个 shared_ptr ,你需要提供删除器,它将被类型删除(因此不是 shared_ptr 类型本身的一部分)。你可以这样做:

shared_ptr<void> create_foo() {
return {FooFactory(), FooDestroy};
}

关于c++ - 将 shared_ptr 与来自 void* 的 typedef 的对象一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40076634/

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