Joh*_*nck 3 c++ gcc volatile make-shared c++11
这段代码编译干净,适用于我尝试过的所有编译器,除了GCC 8(和当前的GCC主干):
std::make_shared<volatile int>(0)
Run Code Online (Sandbox Code Playgroud)
我想知道:
std::atomic,但语义不一样所以建议使用它而volatile不是我正在寻找的.请在此处查看:https://godbolt.org/z/rKy3od
根据标准语言,这是libstdc ++不符合.
这可能是个错误.使用标准分配器make_shared调用allocate_shared,std::allocator<remove_const_t<T>>其中T是共享对象的类型.此分配器仅用于为底层共享对象(包含volatile int和原子计数器的结构)获取重新绑定的分配器.因此,将此底层对象声明为非const非volatile是完全正确的.
这个定义make_shared将起作用:
template<class T,class...Args>
auto make_shared(Args&&...args){
using ncvT= std::remove_cv_t<T>;
return std::allocate_shared<T>(std::allocator<ncvT>(),std::forward<Args>(args)...);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |