讨论/求职面试/placement new疑问,求指教/
placement new疑问,求指教
void *allocate(size_t bytes){
    return operator new(bytes);
}

void deallocate(void *ptr){
    operator delete(ptr);
}

struct placeholder{
};

//这个来自tinystl,我不懂这个placeholder有什么意义?
inline void* operator new(size_t, placeholder, void *ptr){
    return ptr;
}
//这个placement到底在干什么?
//我看<<c++ primer>>上面说operartor new(size_t, void *ptr)是在
//ptr处构造对象,那么下面这个函数如何解释?在哪构造对象呢?
inline void* operator new(size_t, void *ptr1, void *ptr){
    return ptr1;
}

inline void operator delete(void *ptr, placeholder) throw(){
}

class Test{
public:
    string b;
    int a;
public:
    Test(){
        cout << "默认构造\n";
    }

    Test(int _a):a(_a){
        cout << a << " " << "构造函数\n";
    }
};

int main()
{
    Test* test = (Test*)allocate(sizeof(Test));
    int i = 0;
    int *j = &i;
    test = new(j, j) Test(1234);    //为什么这也能行?j, 明明是int *不是test *,到底在那构造对象呢?
    cout << test->a << endl;
    deallocate(test);
}
共 1 个回复

一般说placement new是指额外带有一个指针参数的new函数,这个函数不需要做任何事,因为原本new函数(注意区分new operator和operator new)是用来调malloc申请空间,而你调用这个placement new表示你之前已经申请了空间但啥事都没干,然后你希望现在来对这个空间做处理,这就是那个额外指针的作用,这个指针是你在外头就已经申请了空间了。