mar*_*nus 7 c++ destructor compiler-warnings visual-studio visual-studio-2015
我在我的代码中使用了一个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);
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这在Visual Studio 2015中给出了一个警告,包括Debug和Release:
warning C4189: 'b': local variable is initialized but not referenced
它在g ++中编译得很好,即使用-Wall也是如此.知道为什么我会收到警告吗?这可能是编译器中的错误吗?b显然在b->~Node()
通话中使用.
当我将Node实现更改为此时,似乎编译正常:
struct Node {
~Node() {
}
};
Run Code Online (Sandbox Code Playgroud)
但据我所知,这不应该有所作为.
C++ 中没有编译器警告的标准。因此,每个编译器都可以在任何他想要的地方警告你,这是一个选择的问题。
在您的情况下,警告确实有意义,因为默认析构函数可能不会被视为引用(例如:所有局部变量默认在其作用域末尾被销毁)。