-3

我有以下代码:

  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(),但这似乎是不必要的。

4

1 回答 1

1

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

如问题中所述,从 a 访问底层原始指针的正确方法unique_ptr是使用get(). 这是一个设计功能,显然是为了帮助避免意外导致多所有权场景,这会导致未定义的行为。

于 2015-03-11T16:59:25.080 回答