当类破坏三阶规则(或五阶规则)时,是否可以触发编译器警告?
此功能听起来很容易实现,在安全关键软件中非常有用,但我无法在文档或Google搜索结果中找到它.
考虑安全软件,一般不允许动态分配,不允许例外.仅当class explicity定义operator new和时才允许动态分配delete.new对其他类使用运算符应导致编译失败.
在描述的情况下导致编译失败的最简单方法是删除全局new运算符:
void* operator new(std::size_t) = delete;
Run Code Online (Sandbox Code Playgroud)
一方面,这会导致标准库的副作用.例如包括<array>传播列入<new_allocator>由<stdexcept>.<new_allocator>使用::new运算符,即使您不想使用异常和内存分配,这也会导致构建失败.据Scoot说,Meyers <array>应该是裸机友好的.
另一方面,这会导致编译器内置运算符错误
src/main.cpp:91:31: error: deleted definition of 'void* operator new(std::size_t)'
void* operator new(std::size_t) = delete; ^
<built-in>: note: previous declaration of 'void* operator new(std::size_t)'
Run Code Online (Sandbox Code Playgroud)
有禁止::new和使用的解决方案<array>吗?
请问有什么解决禁止::new全球所有?