Как показано в приведенном ниже коде, я не мог понять, почему !p
является законным, поскольку для std::unique<T>
нет функции-члена 'operator! ()'.
Поскольку std::cout << p.get() << std::endl;
является законным, я думаю p
- это объект, а не указатель, поэтому я запутался.
Может ли кто-нибудь сделать мне одолжение?
std::cout << "unique ownership semantics demo\n";
{
auto p = std::make_unique<D>();
std::cout << p.get() << std::endl; //I think p is an object, not an pointer.
auto q = pass_through(std::move(p));
assert(!p); //Why it is legial?
q->bar();
}