SAL 注释:std::shared_ptr 的 _Ret_maybenull_
Posted
技术标签:
【中文标题】SAL 注释:std::shared_ptr 的 _Ret_maybenull_【英文标题】:SAL Annotations: _Ret_maybenull_ for std::shared_ptr 【发布时间】:2017-11-29 11:15:41 【问题描述】:是否可以用 SAL 注释我的智能指针返回函数?
_Ret_maybenull_ std::shared_ptr<MyClass> getMyObject();
给我警告
警告 C6504:无效注释:“Null”属性只能用于指针、指向成员的指针、数组或引用类型的值:函数“getMyObject”返回。实际类型 'class std::shared_ptr'。
写这个时没有一个警告:
auto a = getMyObject();
a->foo();
【问题讨论】:
lastsector.wordpress.com/2013/09/08/… 【参考方案1】:就像这个警告说_Ret_maybenull_
不能应用于任何类型的智能指针,只能应用于原始类型。作为替代方案,此函数的注释可以是_Check_return_
和智能指针的operator ->
的注释(以及其他操作符取消引用存储的指针)_Check_return_ _Ret_notnull_
。不过,您可能需要为智能指针编写自己的包装器才能使用它。
【讨论】:
谢谢。可惜我们前段时间改用智能指针来改进我们的代码库,现在它阻碍了我们进行静态分析。我正在犹豫是否为指针的包装器编写一个包装器,特别是因为 std 智能指针类的测试比我们自己编写的要好得多。 @PhilLab 这看起来像是公共实现继承和using parent::parent;
的工作——然后您可以使用带注释的简单转发来隐藏operator->
。以上是关于SAL 注释:std::shared_ptr 的 _Ret_maybenull_的主要内容,如果未能解决你的问题,请参考以下文章
`std::optional` 比 `std::shared_ptr` 和 `std::unique_ptr` 有啥优势?
为啥我不能在 C++0x 中对 std::shared_ptr 的向量执行 std::copy?
这是 std::vector 和 std::shared_ptr 内存泄漏的错误吗?
无法将参数 1 从 'std::shared_ptr<ChaseState>' 转换为 'std::shared_ptr<State<Cow>>