placement-new

placement-new

文章 0 浏览 6

在现有的 T 对象上放置新的 U 并操纵它是 UB?

在此链接中,存储重用部分显示以下示例。 void x() { long long n; // automatic, trivial new (&n) double(3.14); // reuse with a different type o…

深白境迁sunset 2025-01-11 11:14:22 0 0

创建静态单例时需要什么 MaxAlign 技巧?

遵循 Loki 单例中的代码片段实现,它展示了所谓的“MaxAlign Trick”。我认为它与对齐有关(废话!),但是尝试与联合内提到的所有类型对齐的目的是什…

风苍溪 2025-01-09 13:04:42 1 0

为什么我应该使用新的展示位置?

看起来,placement new 在预先分配的内存上创建了一个新对象,那么这是否意味着它会花费更少的时间?看起来它比使用旧的普通 new 分配更快。那么,如…

心是晴朗的。 2025-01-03 14:29:22 0 0

销毁然后使用相同的变量构造新对象

有时重新开始是件好事。在 C++ 中,我可以采用以下简单的操作: { T x(31, Blue, false); x.~T(); // enough with the old x ::new (&x) T(22, Brown,…

时光清浅 2025-01-02 18:17:18 0 0

malloc 和新与新的展示位置

过去几天我一直在研究这个问题,到目前为止,除了教条论点或诉诸传统(即“这是 C++ 方式!”)之外,我还没有真正找到任何令人信服的东西。 如果我正…

余生再见 2024-12-28 16:11:10 1 0

为什么这段代码试图调用复制构造函数?

我刚刚花费了大量的时间来解决 Visual Studio 中的编译错误。我已将代码提取到下面的小型可编译示例中,并在 IdeOne 上进行了尝试,并得到了相同的错…

嘿哥们儿 2024-12-28 15:15:44 2 0

如何将 new 放置在堆栈上

考虑以下代码: char mem[sizeof(char)]; void* p = mem; f = new(p) char; 由于变量 mem 的内存应该位于堆栈上 那么,为什么这块内存最终没有被自动…

海之角 2024-12-27 18:32:25 1 0

如何正确释放placement new分配的内存?

我读过一些文章,当您使用 placement new 时,您必须手动调用析构函数。 考虑下面的代码: // Allocate memory ourself char* pMemory = new char[ si…

孤蝉 2024-12-27 18:21:17 0 0

对于在同一地址构造两次的对象,编译器如何知道必须调用第二个析构函数?

在下面的代码中,类 C 中的对象 sub 被构造了两次。第一个构造调用默认构造函数 Sub(),第二个构造使用 placement new 在同一地址重建此对象。 因此析…

烈酒灼喉 2024-12-27 15:31:10 0 0

销毁然后使用相同的变量构造新对象

有时重新开始是件好事。在 C++ 中,我可以采用以下简单的操作: { T x(31, Blue, false); x.~T(); // enough with the old x ::new (&x) T(22, Brown,…

小嗲 2024-12-26 11:37:40 0 0

数组放置新需要缓冲区中未指定的开销?

C++11 Feb 草案的 5.3.4 [expr.new] 给出了示例: new(2,f) T[5] 导致调用 operator new[](sizeof(T)*5+y,2,f) . 这里,x和y是非负未指定值,表示数组…

森林很绿却致人迷途 2024-12-24 19:59:13 2 0

是否将指针强制转换为“void*”?调用placement new 时有什么影响吗?

我正在审查自定义容器的代码,其中的某些部分创建如下所示的元素: ::new( (void*)&buffer[index] ) CStoredType( other ); 部分这样做: ::new( &buf…

终止放荡 2024-12-20 12:16:49 0 0

使用放置 new[] 有什么问题吗?做

考虑下面的程序。它是由一个复杂的案例简化而来的。除非我删除 Obj 类中的虚拟析构函数,否则它无法删除先前分配的内存。我不明白为什么程序输出的两…

沉睡月亮 2024-12-18 01:52:42 2 0

删除这个并放置新的虚拟派生类

class base { int a; protected: template class derived; public: base() {} virtual ~base() {} virtual void func() {} static base* maker(); }; …

南街九尾狐 2024-12-16 19:30:44 2 0

通过放置 new 来延迟真正的基类构建

我问以下方法是否(以及为什么)a)合法且b)道德。我询问的重点是 C++03,但也欢迎有关 C++11 的注释。这个想法是为了防止本身可以默认构造的派生类…

唱一曲作罢 2024-12-13 15:26:04 3 0
更多

推荐作者

紫罗兰の梦幻

文章 0 评论 0

-2134

文章 0 评论 0

liuxuanli

文章 0 评论 0

意中人

文章 0 评论 0

○愚か者の日

文章 0 评论 0

xxhui

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文