即使在同一类型上,是否应该使用 new 位置来调用析构函数

2024-04-11

#include <new>

struct X
{
    ~X() { std::cout << "destroyed" << std::endl; }
    int x;
};

int main(int argc, const char * const * const argv)
{
    X x{1};

    new (&x) X{2};

    std::cout << x.x << std::endl;

    return 0;
}

Output

2
destroyed

我所知道的是,当使用放置 new 时,应该始终调用析构函数。然而,在此示例代码中,析构函数在主函数末尾隐式调用,因此我认为再次调用它是未定义的行为。 所以现在我想知道在使用placement new时是否应该始终调用析构函数,或者是否存在某些条件下不应调用析构函数?


它在 C++ 标准中明确指定

[基本生活]

5 https://timsong-cpp.github.io/cppwp/n4659/basic.life#5程序可以通过重用对象来结束任何对象的生命周期 对象占用的存储空间或通过显式调用 具有非平凡类类型的对象的析构函数 析构函数。对于具有非平凡的类类型的对象 析构函数,程序不需要调用析构函数 在重用对象占用的存储之前明确地或 释放;但是,如果没有显式调用析构函数或 如果不使用删除表达式来释放存储,则 析构函数不应被隐式调用,并且任何依赖于析构函数的程序 析构函数产生的副作用具有未定义的行为。

The last sentence leaves a little bit of wriggle room regarding the possibility of undefined behavior1. But ultimately, the only types for which this is well-defined are those for which the destructor is truly trivial.


1 - As of writing this, anyway.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

即使在同一类型上,是否应该使用 new 位置来调用析构函数 的相关文章

  • TFS API - 缓慢的 foreach 变更集迭代

    问题背景 我正在使用 TFS api 查询 TFS 服务器上的大范围 1 600 文件 我从每个文件中收集其所有 ChangesetId 然后将其收集在列表中 代码 这是我正在使用的代码 它可以正确生成 QueryHistory 方法中指定
  • 如何从 webmethod 向 AJAX 调用返回异常?

    我回来了List
  • 通过 TCP/.NET SSLStream 发送文件很慢/无法正常工作

    我正在编写一个与 SSL 配合使用的服务器 客户端应用程序 通过SSLStream 它必须做很多事情 不仅仅是文件接收 发送 目前 它的工作原理是 只有一个连接 我总是使用从客户端 服务器发送数据SSLStream WriteLine 并使
  • 在 PHP 扩展中,推荐从 std::string 返回值的方法

    我们有一个简单的 PHP 函数 其目的是调用 C 自由函数std string callLibrary std string 并返回其std string返回值 目前看起来是这样的 PHP FUNCTION call library cha
  • 为什么数组不可赋值? [复制]

    这个问题在这里已经有答案了 据我所知 C 标准禁止使用数组作为可修改的左值 即在赋值的左侧 int lhs 4 rhs 4 0 1 2 3 lhs rhs illegal 现在 我一直想知道为什么会这样 我可以看到上面的语句 以及写入数组的
  • 获取不带波形符的泛型类名称[重复]

    这个问题在这里已经有答案了 我正在尝试获取类型名称T使用这个 typeof T Name 班级名称是ConfigSettings 而不是返回ConfigSettings它正在返回ConfigSettings 1 有什么具体原因吗 我怎样才能
  • 如何修复 TcpClient Ip 标头错误校验和

    我正在使用 System Net Sockets TcpClient 类 但每当我通过网络发送自定义数据包时 我都会在wireshark捕获上看到错误的校验和 我该如何修复它 问题是您在网络接口上设置了校验和卸载 这会导致您的网卡计算校验和
  • C 风格强制转换与内在强制转换

    假设我已经定义了 m256d x我想提取低 128 位 我会做 m128d xlow mm256 castpd256 pd128 x 然而 我最近看到有人这样做 m128d xlow m128d x 是否有用于演员的首选方法 为什么要用第一
  • gcc 删除内联汇编代码

    看起来 gcc 4 6 2 删除了它认为函数中未使用的代码 test c int main void goto exit handler asm volatile jmp 0x0 exit return 0 拆解main 0x0804840
  • 在unity3D中显示数学方程

    我想使用它的 GUI 系统统一显示数学方程 有办法吗 我正在使用 C 语言在 Unity 中进行编程 如果我还可以使用 C 代码显示数学符号 这对我来说会很有用 谢谢 自 2016 年起 您可以使用TEXDraw https assetst
  • 如何使用 HttpClient 验证 Pardot API

    我花了大约一天的时间尝试对 Pardot API 进行身份验证 它不喜欢我尝试发布消息正文的方式 所以我想发布对我有用的解决方案 如果您有任何建议或替代方案 我想听听 ServicePointManager SecurityProtocol
  • 如何在控制台程序中获取鼠标位置?

    如何在 Windows 控制台程序中用 C 获取鼠标单击位置 点击时返回鼠标位置的变量 我想用简单的文本命令绘制一个菜单 这样当有人点击时 游戏就会注册它并知道位置 我知道如何做我需要做的一切 除了单击时获取鼠标位置 您需要使用 Conso
  • 为什么.net中的数组只实现IEnumerable而不实现IEnumerable

    我正在实现自己的 ArrayList 类 当我意识到这一点时 我感到很惊讶 public System Collections Generic IEnumerator
  • 如何重写(重新实现)QFileSystemModel 中的成员函数

    我已经为此苦苦挣扎了一段时间 Qt s QFileSystemModel由于图标获取算法非常糟糕 在获取数百个文件时速度非常慢 我想完全禁用图标 它们被提取到QFileSystemModel data方法不是虚拟的 QFileSystemM
  • 有没有办法将复选框列表绑定到 asp.net mvc 中的模型

    我在这里寻找一种快速简便的方法来在模型中发生回发时绑定复选框列表项的列表 显然现在常见的做法似乎是这样的form GetValues checkboxList 0 Contains true 这看起来很痛苦而且不太安全 有没有一种方法可以绑
  • 错误:C# 尝试读取或写入受保护的内存

    我很难纠正这个错误 该应用程序在 4 台不同的机器上进行了测试 在其中 3 台上运行良好 但一台 Vista PC 在尝试通过 WebBrowser1 打开页面时出现此错误 解决这个问题的任何帮助对我都会非常有帮助 System Acces
  • Eclipse (C/C++) 错误:平台关闭后发现作业仍在运行

    当我打开 Eclipse 时 它 在一小时前工作过 但在启动时冻结并给出错误 发生错误 请参阅日志文件 请参阅下面的日志文件 尽管其中一些信息出现在日志中 操作系统 Mac OSX 10 7 5 Eclipse 面向 C C 开发人员的 E
  • C++11 中引入了哪些重大更改?

    我知道 C 11 中至少有一项更改会导致一些旧代码停止编译 引入explicit operator bool 在标准库中 替换旧实例operator void 诚然 这将破坏的代码可能是一开始就不应该有效的代码 但它仍然是一个破坏性的变化
  • 创建进程的多个子进程并维护所有 PID 的共享数组

    我已经分叉了几次 并用 C 创建了一堆子进程 我想将它们所有的 PID 存储在一个共享数组中 PID 的顺序并不重要 例如 我创建了 32 个进程 我想要一个 32 个整数长的数组来存储每个 PID 并且每个进程都可以访问 最好的方法是什么
  • 如何在 C# 中将 json 转换为平面结构

    我正在尝试用 C 编写函数 将 JSON 转换为键 值对 它应该支持数组 例如下面的 JSON title title value components component id id1 menu title menu title1 tit

随机推荐

  • 无法在同一页面设置PHP cookie

    我在同一页面上设置 cookie 时遇到问题 我在我的网站上使用了 cookie 它工作正常 我倾向于将 php 设置为单独的文件 现在 我在同一页面上设置 cookie 但它似乎不起作用 expire time 5 setcookie r
  • 如何使用 JSP 页面中的参数运行 java 类?

    我之前编写了一个从 bash 文件执行的 java 类 现在我需要使用 Javascript HTML 按钮允许它从 JSP 页面执行 我想知道如何做到这一点 首先 我的课程是这样的 public class Sync public sta
  • WCF .svc 文件在 IIS7.5 .NET 4.0 中用作纯文本 - 不在默认网站下

    最终更新 事实证明 由于 DotNetNuke 模块的压缩问题 这是一个转移注意力的问题 我必须添加到 PageBlaster DNN 模块 所以这不再是问题 我正在将 WCF svc 文件部署到我的实时网站 http www pokerd
  • 无法打开输入文件:localhost:8080

    在 Windows 上 要从命令提示符运行 PHP Web 服务器 我键入 php s localhost 80800 t public 我收到此错误 无法打开输入文件 localhost 8080 And yet cmd php test
  • 在 SQL 中使用累积需求时在聚合级别上优化表概览

    我试图找到最好的方法来获得累积显示的总体概述的概述 即通过扣除不满足每个步骤中的累积要求的观察结果 这是表脚本和示例数据 CREATE TABLE Table A id INTEGER NOT NULL PRIMARY KEY totalA
  • Spark 中的迭代缓存与检查点

    我有一个在 Spark 上运行的迭代应用程序 我将其简化为以下代码 var anRDD org apache spark rdd RDD Int sc parallelize 0 to 1000 var c Long Int MaxValu
  • 在 Python App Engine API 中写入和读取 blobstore 文件以存储时间戳

    我正在使用 Google App Engine 的 python API 我想做的是从服务器加载文件列表 如果它已经过去了超过一个时间间隔 例如 1 小时 为此 我尝试将执行的最后一个操作小时存储到文件中 并在下次读取它以了解与下一个请求的
  • 自定义字体和 XML 布局 (Android)

    我正在尝试在 Android 中使用 XML 文件定义 GUI 布局 据我所知 没有办法指定您的小部件应该在 XML 文件中使用自定义字体 例如您放置在 asset font 中的字体 并且您只能使用系统安装的字体 我知道 在 Java 代
  • ggplot2 中的并排水平图例

    我想让我的 ggplot 图例并排出现在图下方 变量名称位于符号上方 就像它们在this https kohske wordpress com 2010 12 25 various position adjustments of legen
  • Html 锚文本格式

    这可能是一个基本问题 但我使用的是 HTML 锚点 锚点的文本作为多行段落 我有 br 锚文本部分中当前无法识别的标签 所有文本在输出中都在一行中 锚标签代码如下 li a href title View all Printed Docum
  • 为什么 arr 和 &arr 相同?

    我已经编程c c 很多年了 但是今天的偶然发现让我有些好奇 为什么下面的代码中两个输出产生相同的结果 arr当然是地址arr 0 即指向arr 0 我本来期望 arr是该指针的地址 但它具有相同的值arr int arr 3 cout lt
  • 如何使用 Visual Studio 命令行 + SCons 构建 Windows XP 应用程序?

    使用 Visual Studio 2015 IDE 构建 Windows XP 应用程序一点也不难 您只需要使用正确的平台工具集 v120 xp 或 v140 xp 并确保在目标计算机上安装正确的可再发行 Visual Studio 运行时
  • 绘制可调整大小(不相交)的多边形

    我到处寻找但找不到答案 我 需要通过鼠标交互绘制可调整大小的多边形 但我 不希望出现不规则 重叠或相交的多边形 结尾 这是绘制可调整大小的多边形的简单示例http www wolfpil de polygon html http www w
  • Pom.xml项目构建错误

    我已经在 Eclipse 中导入了 Maven 项目 但在 pom xml 中出现以下错误 项目构建错误 dependencyManagement dependency dependency systemPath 为 jdk tools j
  • 如何在uWSGI中配置允许的GET参数字符数?

    我正在使用 nginx uWSGI 运行 Django 刚刚从本地开发转移到临时服务器后 我发现我们发出的特定 GET 请求有一个很长的查询字符串 尝试调试 似乎 uWSGI 不接受这个基于长度的查询字符串 我可以传递短字符串并且它可以工作
  • 为什么 $1 在 hashref 赋值中指向与多个正则表达式匹配的相同值?

    对于没有故事的问题 请跳到行后 我正在把一串由一些字母和数字组成的字符串 这两种情况都可能出现 分成散列引用中的两个字段 仅当该字段存在时它们才应该出现 该字符串可能如下所示 D d 例如ZR17 R15 19 22 我不想简单地将其放入这
  • Oracle - 特定用户的审计跟踪

    正如主题所述 我正在寻找一种方法来跟踪特定用户的活动 可能有也可能没有 SYSDBA 或 SYSOPER 权限 例如 人力资源部 我想知道他的登录详细信息是什么 他更改了哪些对象 它们的原始值是什么 执行的 SQL 语句 执行了哪些过程 函
  • 升级 Zend Framework - 步骤和指南

    我维护的网站目前使用的是 Zend Framework 1 8 0 该版本已经有 2 年多的历史了 我想升级到 1 11 11 但在寻找如何顺利完成此操作的基本指南方面遇到了一些困难 就像用最新文件覆盖library Zend文件夹一样简单
  • 如何在 C++ 中将调色板生成器和调色板使用过滤器与 FFmpeg 一起使用?

    我想在 QT 项目中创建一个动画 gif 当我直接将 QImage 缩放到 AV PIX FMT RGB8 时 输出看起来很糟糕 带有闪烁的伪影 而当我缩放到 AV PIX FMT YUV420P 之间时 输出会抖动 这看起来并没有好多少
  • 即使在同一类型上,是否应该使用 new 位置来调用析构函数

    include