使用 placement new 在另一个函数中使用 args 调用构造函数
Call constructor using args in another function using placement new
我有一个 class 由于各种原因不允许有复制构造函数(一个是因为该结构有一个指向数组的指针,我不想多次删除也不想我要copy/clone了)。
我想在推送函数中构建对象。喜欢推到一个数组上。我有以下测试代码,但我似乎无法使用构造调用它(除非它是我明确不想要的复制构造函数)。
需要明确的是,在对象准备好进入数组之前不应构建对象,这就是我使用新位置的原因
#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)
。
我有一个 class 由于各种原因不允许有复制构造函数(一个是因为该结构有一个指向数组的指针,我不想多次删除也不想我要copy/clone了)。
我想在推送函数中构建对象。喜欢推到一个数组上。我有以下测试代码,但我似乎无法使用构造调用它(除非它是我明确不想要的复制构造函数)。
需要明确的是,在对象准备好进入数组之前不应构建对象,这就是我使用新位置的原因
#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)
。