为什么没有'unique_ptr <qbytearray>`降级为`QByteArray *`?</qbytearray>

时间:2015-03-09 21:32:37

标签: c++ qt c++11 unique-ptr qbytearray

我有以下代码:

  msg_buf_ptr = std::make_unique<QByteArray>();

  return QDataStream{msg_buf_ptr, QIODevice::WriteOnly};

我收到以下错误:

no known conversion for argument 1 from ‘std::unique_ptr<QByteArray>’ to ‘QByteArray*’

可是......为什么呢?我认为unique_ptrshared_ptr在作为参数传递给指针的函数时会自动降级为原始指针。如果没有,为什么不呢?如果他们(通常)这样做,为什么在QByteArray

的情况下这会失败

我可以明确地调用msg_buf_ptr.get(),但这似乎没必要。

1 个答案:

答案 0 :(得分:1)

不,这不是特例;标准库智能指针在需要原始指针的上下文中不会隐式降级。

正如问题所述,从unique_ptr访问基础原始指针的正确方法是使用get()。这是一个设计功能,显然旨在帮助避免意外导致多个所有权方案,这将导致不确定的行为。