C ++ inplace析构函数编译警告
我在我的代码中使用了一个inplace析构函数,类似于下面这段代码:
#include <new>
#include <stdlib.h>
struct Node {
};
int main(int, char**) {
Node* a = reinterpret_cast<Node*>(malloc(sizeof(Node)));
new(a) Node;
Node* b = a;
b->~Node();
free(a);
}
不幸的是,在Debug和Release中,这给了我一个Visual Studio 2015的警告:
warning C4189: 'b': local variable is initialized but not referenced
它在g ++中编译得很好,即使在-Wall中也是如此。 任何想法为什么我得到警告? 可能这是编译器中的一个错误? b明确地用在b->~Node()
调用中。
当我将Node实现更改为这个时,它似乎也很好编译:
struct Node {
~Node() {
}
};
但据我所知,这不应该有所作为。
在C ++中没有编译器警告的标准。 因此,每个编译器都可以在任何他想要的地方警告你, 这是一个选择的问题 。
在你的情况下,警告确实有意义,因为默认析构函数可能不会被视为引用(例如:所有局部变量在其作用域末尾被默认销毁)。
微不足道的析构函数
如果满足以下所有条件,则类T的析构函数是微不足道的:
一个简单的析构函数是一个不执行任何操作的析构函数。 带有琐碎析构函数的对象不需要delete-expression,并且可以通过简单地释放其存储来处理。
链接地址: http://www.djcxy.com/p/94711.html上一篇: C++ inplace destructor compile warning
下一篇: Keep Matlab from stepping into built in functions during dbstop if error