【问题标题】:Call constructor using args in another function using placement new使用放置 new 在另一个函数中使用 args 调用构造函数
【发布时间】:2020-10-06 04:23:05
【问题描述】:

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

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

要明确的是,在准备好放入数组之前不应构造对象,这就是我使用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});
}

【问题讨论】:

    标签: c++ perfect-forwarding


    【解决方案1】:

    您对Push() 的呼叫应该只是Push(5, 1)

    【讨论】:

    • 好吧,我觉得自己很傻。 {} 是我旧的非转发代码中的占位符
    • 发生在我们最好的人身上。 :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 2012-07-28
    • 2016-07-03
    • 1970-01-01
    • 2010-12-15
    • 2015-07-02
    相关资源
    最近更新 更多