Questions tagged «c++11»

将此标记用于必须作为C ++ 11编译的代码(不使用C ++ 14或更高版本中引入的任何功能)。

2
复制具有线程安全规则建议的非const参数的构造函数?
我有一些旧代码的包装。 class A{ L* impl_; // the legacy object has to be in the heap, could be also unique_ptr A(A const&) = delete; L* duplicate(){L* ret; legacy_duplicate(impl_, &L); return ret;} ... // proper resource management here }; 在此旧版代码中,“复制”对象的函数不是线程安全的(调用相同的第一个参数时),因此const在包装器中未对其进行标记。我猜想遵循现代规则:https : //herbsutter.com/2013/01/01/video-you-dont-know-const-and-mutable/ 这duplicate看起来是实现复制构造函数的一种好方法,除了细节不是const。因此,我不能直接这样做: class A{ L* impl_; // the legacy object has …

2
我可以对std :: array使用自定义分配器来获得安全的加密密钥吗?
我知道它std::array是完全分配在堆栈中的,但是这个问题是由需要考虑两点的安全问题引起的: 输入的数据在std::array销毁时将归零或随机化 输入中的数据std::array将被锁定,因此无论是崩溃还是交换内存,它都不会进入磁盘 通常情况下,用std::vector的解决方案是创建一个自定义分配器的是做这些事情。但是,对于std::array,我没有看到如何执行此操作,因此也没有看到这个问题。 我能做的最好的事情是: template <typename T, std::size_t Size> struct SecureArray : public std::array<T, Size> { static_assert(std::is_pod<T>::value, "Only POD types allowed") static_assert(sizeof(T) == 1, "Only 1-byte types allowed") virtual ~SecureArray() { std::vector<uint8_t> d = RandomBytes(Size); // generates Size random bytes std::memcpy(this->data(), d.data(), Size); } } 但这显然缺少内存锁定,std::array这使首先要使用的性能方案变得复杂std::array。 有更好的解决方案吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.