通过放置 new 转移对象所有权
我有一个 Visual Studio 2008 C++ 项目,其中有一个管理无法复制的资源的类。我已经实现了按引用结构传递语义(ala std::auto_ptr)。 class Test str…
C++ 中放置 new VS 显式构造函数调用
最近我遇到了这两种在内存中特定位置创建对象的方法: 1. void* mem = malloc(sizeof(T)) T* obj = new(mem) T() 2. T* obj = (T*)malloc(sizeof(T)) …
在历史代码中不寻常地使用 new。这是什么意思?
我只是移植一些旧代码: #define NewArrayOnHeap(TYPE, COUNT, HEAP, NEWPTR, ERROR) \ ((*(NEWPTR) = new ( #TYPE "[" #COUNT "]", __alignof(TYPE),…
关于如何在基于动态数组的结构中存储键值对的想法
我有一个具有以下属性的动态数组: 存储键值对结构。 每当添加条目时重新分配内存 (realloc)。调用构造函数。 删除很棘手 - 被删除的条目必须从它所在…
覆盖 new 但告诉 unordered_map 不要使用它
我正在为 C/C++ 编写一个垃圾收集器作为编程练习,其中一部分涉及全局重写 new。然而,垃圾收集器还使用一个unordered_map(来存储指向已分配块的指针…
调用析构函数方法比较
我只是想知道这三种调用析构函数的方法是否有任何显着/严重的差异。考虑以下代码。另请考虑 main() 中提到的两种情况。 class Sample { public: ~Samp…
在从放置 new 获得的指针上使用运算符删除的合法性
我确信这段代码应该是非法的,因为它显然不起作用,但它似乎是 C++0x FCD 允许的。 class X { /* ... */} void* raw = malloc(sizeof (X)) X* p = new…
Placement-new 与 gcc 4.4.3 严格别名规则
我有一些代码,多年来我一直成功地使用它们来实现“变体类型对象”;也就是说,一个 C++ 对象可以保存各种类型的值,但仅使用(大约)尽可能多的可能…
C++ 中的简单存储类和严格的别名
我有以下代码用于存储一个小类。 #include <iostream> template<typename T> class storage { private: struct destroy { T& m_t destroy(…
这第二个新的是什么?
第二行是什么? (在回答另一个问题时看到。) int * x = new int [1] int * y = new (x) int 第二行之后 x 和 y 具有相同的值(指向相同的位置)。 …
C++ 中的段错误对在预分配缓冲区中创建的对象调用虚拟方法
嗯...标题有点拗口,但我真的不确定哪一部分引起了问题,我已经运行了很多次,并且无法查明为什么... 这个想法是使单个 Choice 实例能够存储任何一个…