C inplace析构函数编译警告

前端之家收集整理的这篇文章主要介绍了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);
}

不幸的是,这在Visual Studio 2015中给出了一个警告,包括Debug和Release:

警告C4189:’b’:局部变量已初始化但未引用

即使使用-Wall,它也能很好地编译.知道为什么我会收到警告吗?这可能是编译器中的错误吗? b明显用于b-> ~Node()调用.

当我将Node实现更改为此时,似乎编译正常:

struct Node {
    ~Node() {
    }
};

但据我所知,这不应该有所作为.

解决方法

C中没有编译器警告的标准.因此,每个编译器都可以在任何他想要的地方发出警告,这是一个选择问题.

在您的情况下,警告确实有意义,因为默认析构函数可能不会被视为引用(例如:所有局部变量默认在其作用域的末尾被销毁).

猜你在找的C&C++相关文章