gpt4 book ai didi

c++ - 知道谁指向它的对象

转载 作者:搜寻专家 更新时间:2023-10-31 01:14:46 25 4
gpt4 key购买 nike

我有 3 个不同的类(A、B、C),每个类都有一个共享对象(对象 X)的 shared_ptr。我想要做的是向对象 X 提供有关谁在指向它的信息。例如,如果没有 A 对象指向它,它就不需要计算仅在 A 类更新时使用的数据。并且对象 X 可以保留指向指向它的 C 对象的指针 vector ,因此当与 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 的 vector 中或从 vector 中删除它。

所以我的主要问题是这是个好主意吗?有没有更好的方法来实现跟踪谁指向某个对象的想法?这种想法有没有具体的名称(我无法想象我是第一个尝试这样的东西,但我在搜索时没有找到任何东西所以也许我只是不知道正确的名字寻找……)

谢谢。

最佳答案

一种更简单的方法是观察者模式,又名发布/订阅者。参见 http://en.wikipedia.org/wiki/Observer_pattern .您的 X 对象是发布者,可以提供 3 种不同的接口(interface)供观察。您的 A、B 和 C 对象是订阅者,他们注册以接收更改通知。每个观察者负责在 X 的订阅列表中添加和删除自己。当 X 中发生某些变化时,相应订阅列表中的每个人都会通过他们的界面收到通知。

关于c++ - 知道谁指向它的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10924571/

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