Dra*_*neg 6 c++ volatile shared-ptr
似乎实现中的volatile比较函数shared_ptr不存在.
存在甚至有意义吗?
基本上没有,标准不配合的比较或布尔转换上volatile shared_ptr。
在下面无法编译...
auto main() -> int {
volatile shared_ptr<int> a;
if (a == nullptr) // fails
; // empty
if (a) // fails
; // empty
}
Run Code Online (Sandbox Code Playgroud)
您可以volatile取消 (via. a const_cast),但我不确定这会产生预期的结果。从cppreference:
const通过非const访问路径修改对象并volatile通过非volatile泛左值引用对象会导致未定义的行为。
更笼统地说,在不将成员方法标记为 时volatile,类或库实现者实际上是在说“这不打算用作volatile对象” - 如果是,那么适当的方法或重载将为volatile对象提供。同样,这适用于const,在将成员标记为 时const,他们说“这个类可以用作const对象。
为什么volatile需要,哪些外部来源可以修改shared_ptr“在编译器不知情的情况下”(这是 的用途之一volatile)?如果存在线程问题,那么您最好使用一个线程库实用程序,或者如果要求只是关闭优化,则各种编译器已经为此提供了机制(pragma 等)。
| 归档时间: |
|
| 查看次数: |
984 次 |
| 最近记录: |