Разыменование unique_ptr заставляет адрес памяти печатать бесконечно - PullRequest
0 голосов
/ 10 января 2019

Следующий код заставляет бесконечно печатать адрес памяти res. Я пытаюсь разыменовать переменную "res", чтобы она печатала m_val. Вы знаете, почему он печатает бесконечно?

class Resource
{
private:
    int m_val;
public:
    Resource(int val) { 
        m_val = val;
    }
    ~Resource() { }

    friend std::ostream& operator<<(std::ostream& out, const Resource &res)
    {
        out << &res << ": " << res << "\n";
        return out;
    }
};

int main()
{
    std::unique_ptr<Resource> res(new Resource(5));

    if (res) {
        std::cout << "*res: " << *res; //trying to dereference
    }
    return 0;
} 

Вот другие вещи, которые я пытался напечатать вместо "* (& res)" в операторе печати:

  • * res - это говорит "незаконное косвенное обращение"
  • m_val - он говорит "недопустимая ссылка на нестатический член 'Resource :: m_val'"
  • * & res - с этим он тоже работает бесконечно

1 Ответ

0 голосов
/ 10 января 2019

следующие работы, согласно комментариям выше:

out << &res << ": " << res.m_val << "\n";
...