我想制作一个特殊版本,shared_ptr在创建或销毁时执行特定操作,但我的计划似乎因意识到shared_ptr析构函数是非虚拟的而被挫败,这意味着当我覆盖它时,我的指针永远不会被清理当它们的最后一个实例被销毁时。
想到的唯一替代方法是将这种行为构建到我想与我假设的 custom 一起使用的每个类中,shared_ptr这是不可行的(或在某些情况下是可能的)。
编辑:
我想要这个的原因是因为我想在 lua 中使用一些类作为 userdata 对象,并且我希望我使用这种方式的每个对象都有一个唯一的 fenv 表,当所有对对象已被移除。我计划使用指针的地址,因为它们键入包含 fenv 表的表。
假设我有一个小部件,它可以将其他小部件作为子小部件。我在 Lua 中创建了两个小部件,然后将一个设置为另一个的子小部件,并删除对子小部件的所有 lua 引用(它是一个子小部件的事实在 C++ 中处理)。GC 现在可以随时运行并移除子代。我不一定想让孩子运行它的析构函数,所以我想让它成为一个 shared_ptr。这样,在 Lua 清理之后,C++ 对象仍然可以使用它。如果我已经为其 fenv 分配了值或功能,我仍然希望能够访问它们。只有在删除对我的子小部件的最终引用时,我才希望完全删除表中的 fenv。