Cha*_*l72 16 c++ standards boost
我不明白boost :: checked_delete的目的.文件说:
在5.3.5/5中,C++标准允许使用delete-expression删除指向不完整类类型的指针.当类具有非平凡的析构函数或类特定的运算符delete时,行为是未定义的.有些编译器会在删除不完整的类型时发出警告,但不幸的是,并非所有编译器都会发出警告,程序员有时会忽略或禁用警告.
提供的函数和类模板可用于防止这些问题,因为它们需要完整的类型,否则会导致编译错误.
因此,C++标准允许您删除不完整的类型,如果类型具有非平凡的析构函数,则会导致未定义的行为.什么?一个不完整的类型怎么可能有任何析构函数?不完整的类型只是原型吗?
R S*_*hko 17
不完整类型的最常见示例是仅声明的类型:
// this file does not include the definition of foo
class foo;
void bad(foo *f)
{
delete f; // undefined behavior if there exists foo::~foo
}
Run Code Online (Sandbox Code Playgroud)
实际上,foo的定义可能如下所示:
class foo
{
public:
~foo() { ... };
};
Run Code Online (Sandbox Code Playgroud)
但是如果顶级代码没有"看到"类定义并且只看到类声明,那么代码将被编译.
| 归档时间: |
|
| 查看次数: |
3965 次 |
| 最近记录: |