Как передать unique_ptr другому классу для использования только методов указателя (без изменения владельца)? - PullRequest
0 голосов
/ 14 апреля 2020

Какая правильная / хорошая практика для передачи экземпляра Derived, хранящегося в unique_ptr<Derived>, другому объекту, который использует только методы Derived, без смены владельца? Я не знаю, ясно ли я проясняю. Я просто хочу использовать экземпляр Derived (вызывать его методы и работать с ним), но сохранять право собственности (следовательно, предотвращать удаление ресурсов другим объектом) методом, который его создал.

Вот небольшой пример уточнить это. Это также включает наследование, потому что это больше похоже на мою реальную проблему:

class Base
{
public:
    Base() : m_value(0) {}

    void doThings() { m_value = 1; }

protected:
    int m_value;
};

class Derived : public Base
{
public:
    Derived () : m_value(0) {}

    void doThings() { m_value = 2; }
};

class Foo
{
public:
    Foo();

    void run(Derived &instance) { m_ptr = &instance; callMethod(); } // Is this way correct?
    void run(const unique_ptr<Derived> &instance) { ¿Don't know exactly what to put here? callMethod(); } // Is this way correct?

    void callMethod() { m_ptr->doThings(); }

private:
    Derived *m_ptr;
    // Alternatives?
};

int main()
{
    // I want main to be the unique ownership of the ptr resources
    auto ptr = std::make_unique<Derived>();

    Foo foo();
    // I want to pass the pointer (or its contents) to work with it in another class
    foo.run(*ptr); // What should go here? ptr.get()?

}

Должен ли я каким-то образом передать unique_ptr? константная ссылка может быть? Или просто передать необработанный указатель на ресурс?

Большое спасибо.

...