在从放置 new 获得的指针上使用运算符删除的合法性
我确信这段代码应该是非法的,因为它显然不起作用,但它似乎是 C++0x FCD 允许的。 class X { /* ... */}; void* raw = malloc(sizeof (X)); X* p = n…
Placement-new 与 gcc 4.4.3 严格别名规则
我有一些代码,多年来我一直成功地使用它们来实现“变体类型对象”;也就是说,一个 C++ 对象可以保存各种类型的值,但仅使用(大约)尽可能多的可能…
C++ 中的简单存储类和严格的别名
我有以下代码用于存储一个小类。 #include template class storage { private: struct destroy { T& m_t; destroy(T& t) : m_t(t) { } ~destroy() { m…
这第二个新的是什么?
第二行是什么? (在回答另一个问题时看到。) int * x = new int [1] ; int * y = new (x) int; 第二行之后 x 和 y 具有相同的值(指向相同的位置)…
C++ 中的段错误对在预分配缓冲区中创建的对象调用虚拟方法
嗯...标题有点拗口,但我真的不确定哪一部分引起了问题,我已经运行了很多次,并且无法查明为什么... 这个想法是使单个 Choice 实例能够存储任何一个…
安全放置新&显式析构函数调用
这是我的代码的示例: template struct MyStruct { T object; } template class MyClass { MyStruct* structPool; size_t structCount; MyClass(size_…
放置新的以推迟到不同的构造函数
这安全吗?我在实际实现中没有使用任何虚拟函数,但我很想相信即使我使用了,它仍然是安全的。 class Foo { Foo() { // initialize things } Foo( int…
没有默认构造函数的类数组的运算符 new
对于没有默认构造函数的类,可以使用operator new和placement new来声明该类的数组。 当我阅读更有效的C++中的代码时,我发现代码如下(我修改了一些…
C++,是否可以直接调用构造函数,而不需要new?
如果我已经有对象的内存,我可以显式调用构造函数而不使用 new 吗? class Object1{ char *str; public: Object1(char*str1){ str=strdup(str1); puts…