首页 > TAG信息列表 > placement-new

c-可以使用位置“ new”来更改“ const”数据吗?

[这是can memcpy() be used to change “const” member data?的后续措施.Idiomatic Way to declare C++ Immutable Classes确实引起了问题,尤其是this回答“在围绕不可变数据设计的语言中,它知道(尽管)(逻辑)不可变也可以“移动”数据”. ] 给定具有const成员的结构 struct point

c – 直接调用析构函数后是`new(this)MyClass();`未定义的行为?

在this question of mine,@ DeadMG说通过this指针重新初始化类是未定义的行为.标准中有没有提到它? 例: #include <iostream> class X{ int _i; public: X() : _i(0) { std::cout << "X()\n"; } X(int i) : _i(i) { std::cout << "X(int)\n"; } ~X(){

c – placement new的返回值与其操作数的转换值之间是否存在(语义)差异?

放置new的返回值与其操作数的转换值之间是否存在(语义)差异? struct Foo { ... }; char buffer[...]; Foo *a = new(buffer) Foo; Foo *b = reinterpret_cast<Foo *>(buffer); a和b在某种程度上有所不同吗? 编辑:根据DaBler的评论,这个问题告诉我们,如果使用const / reference成员

c – placement-new address vs raw memory address

放置new的结果似乎与我提供给placement new的内存指针相同.使用GCC,即使对于具有虚函数的类,这似乎也适用,例如…… #include <iostream> #include <vector> using namespace std; class A { public: int a; virtual ~A() {} }; int main() { void *mem = malloc(s

c – 具有替换运算符new的类的自定义std :: allocator

我最近用一些使用SSE的Vector / Matrix类替换了,现在我确保内存正确对齐. 根据this question的答案中的建议,我已经为需要它的类替换了operator new / delete,并开始使用自定义分配器与STL容器一起使用 – 但是,两者之间似乎存在一些冲突: 首先,我简单地复制并粘贴了here中的示例分

c – 初始化数组,放置新的,读取变量,定义的行为?

给定一个类的唯一成员是char [10],它没有继承,也没有虚拟成员,它有一个构造函数,它没有以任何方式提及数组(这样它得到默认初始化 – >没有初始化,就像这样: class in_place_string { char data[10]; static struct pre_initialized_type {} pre_initialized; in_plac

c – 在具有引用成员的对象上使用放置`new`的结果

“Using placement new to update a reference member?”问题显示了这个例子(简化): struct Foo { int& v_; }; int a, b; Foo f{a}; new (&f) Foo{b}; assert(&f.v_ == &a); // UB 通过其原始名称访问f绝对是UB作为explained by T.C. in the linked question.我知道std :: lau

c在自制的矢量容器中放置新的

这里有一些问题非常相似,但它们无法帮助我理解它. 另外,我给出了一个完整的示例代码,因此其他人可能更容易理解. 我已经制作了一个矢量容器(由于内存原因不能使用stl),以前只使用operator = for push_back *,一旦我来到新的位置,我决定向它引入一个额外的“emplace_back”**. *(T :

C放置新vs复制分配

在某处,我读到该向量内部使用了新的对象构造.当我尝试实现类似的容器时,我通常最终得到了类似的分配 _elements = new类型[容量] 然后我添加这样的新对象 void append(const T& element) { // reallocation in case if capacity is equal to size _elements[size++] = ele