0

さて、メンバー変数を介してクラスを削除しても安全かどうかを確認しようとしていますか?メンバー変数には、それを含むクラスへのポインターがあります。これは、Androidでm_objectPtr-> OnDestroy();の後にクラッシュします。呼び出されます。同僚から言われたIOSで動作します。このコードが有効かどうか疑問に思いました。

class Object;
class ValueObject;
class SomeManager;

class DataInterface
{
public:
    virtual void OnDestroy(const ValueObject* value,void* data) = 0;
};

class destroyDelegate : public DataInterface
{
public:
    destroyDelegate(Object* obj) : m_objectPtr(obj)
    {
    }

    //...
    virtual void OnDestroy(const ValueObject* value,void* data)
    {
        m_objectPtr->OnDestroy();
    }
private:
    Object* m_objectPtr;
};

class Object
{
public:
    Object(SomeManager* manager,ValueObject* value) : 
    m_manager(manager), m_value(value), m_delegateObject(this)
    {
        // m_value calls OnDestroy when its being deleted. assume m_value is ref counted
        m_value->setDestroyCallBack(&m_delegateObject);
    }

    void OnDestroy()
    {
        m_manager->Destroy(this); // deletes this class and removes it from its std::list
    }
private:
    SomeManager* m_manager;
    ValueObject* m_value;
    destroyDelegate m_delegateObject;
};

// now some where in code m_value dies and calls on its member variable that inherits 
// DataInterface OnDestroy which chains down to deleting Object.
4

0 に答える 0