可以重写新的编译吗?
背景 我通过应用 new 语句的编码指南来清理旧版代码库。 有 auto x = new(className); 的代码,我将我重写为 auto x = new ClassName(); 。很明显…
当我不使用新位置时,为什么我会发现新的位置错误?
我遇到了这个错误: error: exception cleanup for this placement new selects non-placement operator delete [-fpermissive] ptrCpMsgHandler = ne…
放置在具有自动存储持续时间合法的常量变量上是新的吗?
以下代码是根据标准合法的吗? #include int main() { const int x = 3; new ((void *)&x) int { 15 }; } 在我看来,只要不使用对 x 的引用,就应该有…
如何将现有数据表示为 std::vector
我必须将现有数据(已知大小的 unsigned char 内存区域)传递给需要 const std::vector& 的库函数。有没有办法“欺骗”库函数,让它相信它在对现有数…
C++将 new 放置到 NULL 中的不寻常用法
在 以下 C++98 语句中: multiThreadService[nextBuffer] = new (NULL) MultiThreadService(binder); 这样说是否正确: 这是“placement new”, 该对…
在现有的 T 对象上放置新的 U 并操纵它是 UB?
在此链接中,存储重用部分显示以下示例。 void x() { long long n; // automatic, trivial new (&n) double(3.14); // reuse with a different type o…
创建静态单例时需要什么 MaxAlign 技巧?
遵循 Loki 单例中的代码片段实现,它展示了所谓的“MaxAlign Trick”。我认为它与对齐有关(废话!),但是尝试与联合内提到的所有类型对齐的目的是什…
销毁然后使用相同的变量构造新对象
有时重新开始是件好事。在 C++ 中,我可以采用以下简单的操作: { T x(31, Blue, false); x.~T(); // enough with the old x ::new (&x) T(22, Brown,…
为什么这段代码试图调用复制构造函数?
我刚刚花费了大量的时间来解决 Visual Studio 中的编译错误。我已将代码提取到下面的小型可编译示例中,并在 IdeOne 上进行了尝试,并得到了相同的错…
如何将 new 放置在堆栈上
考虑以下代码: char mem[sizeof(char)]; void* p = mem; f = new(p) char; 由于变量 mem 的内存应该位于堆栈上 那么,为什么这块内存最终没有被自动…
如何正确释放placement new分配的内存?
我读过一些文章,当您使用 placement new 时,您必须手动调用析构函数。 考虑下面的代码: // Allocate memory ourself char* pMemory = new char[ si…
对于在同一地址构造两次的对象,编译器如何知道必须调用第二个析构函数?
在下面的代码中,类 C 中的对象 sub 被构造了两次。第一个构造调用默认构造函数 Sub(),第二个构造使用 placement new 在同一地址重建此对象。 因此析…