我有 3 个不同的类(A、B、C),每个类都有一个 shared_ptr 到一个共享对象(对象 X)。我想要做的是向对象 X 提供有关谁指向它的信息。例如,如果没有指向它的 A 对象,则它不需要计算仅由 A 类在更新时使用的数据。并且对象 X 可以保留指向指向它的 C 对象的指针向量,因此当与 C 对象相关的某些数据已更新时,它可以在它们上调用函数(但 C 对象仍然指向它以从中查询其他数据)。
我正在考虑做的是为每个类上的 shared_ptr 创建一个包装器类,每当构造/分配/破坏包装器时,它将调用指向 X 上的函数的指针(所有相同的情况都会增加/减少 X 上的引用计数) . 这是代码中的想法:
class A
{
public:
A() : m_ptr(&X::IncrementACount, &X::DecrementACount) { }
void SetX( const std::shared_ptr<X> &ptr ) { m_ptr = ptr; }
private:
shared_ptr_wrapper0<X> m_ptr;
};
class B
{
public:
B() : m_ptr(&X::IncrementBCount, &X::DecrementBCount) { }
void SetX( const std::shared_ptr<X> &ptr ) { m_ptr = ptr; }
private:
shared_ptr_wrapper0<X> m_ptr;
};
class C
{
public:
C() : m_ptr(this, &X::StoreCPointer, &X::RemoveCPointer) { }
void SetX( const std::shared_ptr<X> &ptr ) { m_ptr = ptr; }
private:
shared_ptr_wrapper1<X, const C*> m_ptr;
};
A 和 B 都有一个包装的智能指针,其中指定了不带参数的增量/减量函数。当包装的智能指针被设置/清除/等时,将在它包含的 X 对象上调用这些函数,并增加/减少 A/B 计数器。
C 有一个带有一个参数(类型为 const C* )的包装智能指针。当它被设置/清除/等时,它将使用 C 的构造函数(this 指针)存储在其上的数据调用其上的函数,并将在对象 X 上的向量中添加或删除它。
所以我的主要问题是这是个好主意吗?有没有更好的方法来实现跟踪谁在指向一个对象的想法?这种想法是否有一个具体的名称(我无法想象我是第一个尝试这样的东西的人,但我在搜索它时没有找到任何东西,所以也许我只是不知道正确的名称寻找...)
谢谢你。