在另一个类中分配对象数组(C ++)

时间:2014-11-09 05:25:46

标签: c++ arrays class object memory-management

如何在其构造函数的另一个类中分配一个对象数组?

class BloomFilter
{
public:
    BloomFilter(double fp, size_t capacity);
private:
    size_t bf_m;
    size_t bf_k;
};

class RSig {
public:
    RSig(int32_t sizeL1, int32_t sizeL2, double bfFpRate) :
        numSlot_sig(sizeL1), numSlot_bf(sizeL2)
    {
        TL_sigMem = new BloomFilter(bfFpRate, numSlot_bf)[sizeL1];
    }

private:
    int32_t numSlot_sig, numSlot_bf;
    BloomFilter* TL_sigMem;
};

上面的代码给出了以下错误:

In constructor 'RSig::RSig(int32_t, int32_t, double)’:
error: expected ‘;’ before ‘[’ token
         TL_sigMem = new TL_sigMem(bfFpRate, numSlot_bf)[sizeL1];

最好,我不想使用std::vector

2 个答案:

答案 0 :(得分:3)

像这样:

#include <vector>

class RSig
{
public:
    RSig(double rate, std::size_t len) : TL_sigMen(len, BloomFilter(rate)) {}

private:
    std::vector<BloomFilter> TL_sigMem;
};

答案 1 :(得分:1)

要创建对象数组,语法如下:

T* t = new T[<size>];

T是类型,t是数组的名称,<size>是数组的大小。现在,在您的情况下,您希望这样做:

TL_sigMem = new BloomFilter[sizeL1];

这将创建一个大小为BloomFilter的{​​{1}}数组。但是,由于您的sizeL1似乎没有默认构造函数,因此您需要使用BloomFilter及其std::vector函数,扼杀您自己的(相当复杂的)方法,或者改为创建一个指针数组:

emplace_back()