如何在不相关类型的共享指针中共享相同的引用计数器?

How to share the same reference counter in shared pointers of unrelated types?

我有一个 class 成员是另一个成员。我想将指向 master class 的共享指针转换为成员的共享指针。即两个对象都有共同的生命周期,最后一个超出范围的对象将正确地销毁它们。

#include<memory>
struct Mem
{
};
struct Cont
{
  Mem m;
};

我尝试了以下有效但不完美的方法。特别是 mptr.unique() 不会正确。有没有更好的方法来正确共享参考计数器?

void foo()
{
  std::shared_ptr<Cont> contPtr = std::make_shared<Cont>();  
  std::shared_ptr<Mem> mptr(&contPtr->m, [contPtr](Mem*){});

}
std::shared_ptr<Cont> contPtr = std::make_shared<Cont>();  
std::shared_ptr<Mem> mptr(contPtr, &contPtr->m);

this list of std::shared_ptr's constructors

是 (8)