gpt4 book ai didi

C++ 就地析构函数编译警告

转载 作者:可可西里 更新时间:2023-11-01 18:37:33 27 4
gpt4 key购买 nike

我在我的代码中使用了一个就地析构函数,类似于这段精简的代码:

#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 中给了我一个警告,包括调试和发布:

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

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

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

struct Node {
~Node() {
}
};

但据我所知,这应该没有什么不同。

最佳答案

C++ 中没有编译器警告的标准。因此,每个编译器都可以在任何地方警告您,这是一个选择问题

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

关于C++ 就地析构函数编译警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41441356/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com