我有以下代码:
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_ptr
和shared_ptr
在作为参数传递给指针的函数时会自动降级为原始指针。如果没有,为什么不呢?如果他们(通常)这样做,为什么在QByteArray
?
我可以明确地调用msg_buf_ptr.get()
,但这似乎没必要。
答案 0 :(得分:1)
不,这不是特例;标准库智能指针在需要原始指针的上下文中不会隐式降级。
正如问题所述,从unique_ptr
访问基础原始指针的正确方法是使用get()
。这是一个设计功能,显然旨在帮助避免意外导致多个所有权方案,这将导致不确定的行为。