c++ - 确定如何破坏给定类型的对象
问题描述
所以我目前正在制作我自己的 std::vector 版本以在内核模式下使用。但是我遇到了一个问题:我不确定如何确定如何正确破坏给定元素。例如,你可以用整数填充一个数组,而你不需要做任何事情来破坏它。但是对于一个类,您需要在特定位置初始化它,new(address) Class();
并像这样手动调用它的析构函数Class->~Class()
。
显然,您可以通过使用 type_traits 中的函数来检查给定类型是否具有析构函数,但这对我来说根本不可用,因为它没有随 WDK 一起提供。
所以我的问题是,如何确定如何破坏给定类型的对象?
解决方案
你不必。您可以调用您希望销毁的任何类型obj.~T()
的对象。如果它有一个微不足道的析构函数,则此调用可能会导致编译器不发出任何操作。o
T
此外,您还应该放置新的普通类型,即使它们没有显式实现的构造函数。
MWE:
#include <type_traits>
#include <new>
using T = int;
int main() {
std::aligned_storage_t<sizeof(int), alignof(int)> storage;
T* p = new(&storage) T;
p->~T(); // results in zero instructions emitted
}
见现场演示。
推荐阅读
- javascript - 选中复选框时更改输入的值
- javascript - Jest/node.js:自定义 console.log 输出?
- java - 修改 REST API 响应以仅包含查询参数中请求的字段
- sms - Twilio 将 SMS 转发到电子邮件和另一部手机
- javascript - 为什么文本不显示在firebase中
- php - foreach循环只返回一个值,mysqli_insert返回0
- javascript - 多次启动和停止相同的间隔
- python - 试图按下这个一次性电子邮件网站上的复制按钮
- html - 如何在 Chrome 中使用检查器时防止页面导航
- javascript - 选择一行后,MaterialTable 将我送回第一页