新(3)是什么意思?

时间:2017-05-03 07:38:12

标签: c++ memory-management operator-overloading new-operator

SelectInst *Sel = new(3) SelectInst(C, S1, S2, NameStr, InsertBefore);

此处new运算符的含义是什么?

3运算符后的数字new的含义是什么?

4 个答案:

答案 0 :(得分:12)

此代码来自LLVM's codebase。 有一个自定义spring.data.elasticsearch.properties.cluster.routing.allocation.disk.threshold_enabled=false in scope,它用于placement-new初始化对象(cfr。placement syntax

operator new

这是一个玩具示例:

void *User::operator new(size_t Size, unsigned Us) {
  return allocateFixedOperandUser(Size, Us, 0);
}

Live Example

具体而言,该代码用于调整分配的空间以适应其他数据。

答案 1 :(得分:7)

假设SelectInst提供了用户定义的placement operator new,它将int作为用户定义的参数;调用语法意味着使用该用户定义的放置operator new进行内存分配。 e.g。

class SelectInst {
public:
    static void* operator new (std::size_t count, int args) {
    //                                            ~~~~~~~~
        ...
    }
};

SelectInst *Sel = new(3) SelectInst(C, S1, S2, NameStr, InsertBefore);
//                   ~~~

答案 2 :(得分:4)

您可能在SelectInst或全局范围内拥有自定义运算符new(类似于 placement new ):

struct SelectInst
{
    SelectInst(/*...*/);
    // ...

    static void* operator new(std::size_t sz, int custom);
    static void operator delete(void* ptr, int custom); // new counter part
};

void* operator new(std::size_t sz, int custom);
void operator delete(void* ptr, int custom); // new counter part

参见operator_new

的最后一部分

答案 3 :(得分:-1)

doc 上,它表示这是以字节为单位的请求内存量。 (如果它没有超载) 这是一个3 * 8 = 24位的请求,用于将objet存储在内存中。 想想这在某种类型的malloc残余。