繁体   English   中英

使用placement new在另一个函数中使用args调用构造函数

[英]Call constructor using args in another function using placement new

我有一个类由于各种原因不允许有复制构造函数(一个是因为结构有一个指向数组的指针,我不想多次删除,也不想复制/克隆它)。

我想在推送函数中构造对象。 喜欢推到一个数组上。 我有以下测试代码,但我似乎无法使用构造调用它(除非它是我明确不想要的复制构造函数)。

需要明确的是,在准备好放入数组之前,不应构造对象,这就是我使用放置新的原因

#include<utility>
#include<cstdlib>
#include<new>
struct Test{
    int a, b, *p;
    Test(int a, int b) : a(a), b(b), p(nullptr) { }
    Test(const Test&) = delete;
};

Test*ptest;
int offset;

template<typename... Args>
void Push(Args&&... args) {
    new (&ptest[offset++]) Test(std::forward<Args>(args)...);
}

int main(){
    ptest = (Test*)malloc(sizeof(Test)*10); //Array of 10
    Push(Test{5, 1});
}

您对Push()调用应该只是Push(5, 1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM