我需要为共享指针实例编写我自己的析构函数。不幸的是,这样的实例是从库函数调用中获得的,并不是我初始化它的。那么我怎么能在这里“设置”析构函数呢?如何为现有的共享指针设置删除器?
理想的情况下,在我脑海里的代码可能看起来像
pointer.setDeleter(myDeleter);
或
pointer = std::make_shared<MyType>(pointerOld.get(), myDeleter);
我没有找到的第一个假设的API。对于第二个,据说MyType
没有带2个参数的构造函数。它不可编译。
对此有何想法?
谢谢!
为什么你想要这个?据推测,图书馆不希望你与他们的删除者搞砸。 – GManNickG
@GManNickG因为我正在使用具有事件库机制的库。因此,我希望在某个线程(即事件库的线程)中调用删除器。否则,删除者将引入段错误。 – zzy
您是否需要在释放对共享指针的最后一个引用时调用删除器,或者是否足以创建一个新的共享指针(具有其自己的生存期),该共享指针延长了源共享指针的生命周期,去零,运行额外的代码? – Yakk