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

在另一个类中分配对象数组(C++),c++,arrays,class,object,memory-management,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),

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

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

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

T* t = new T[<size>];
这将创建大小为sizeL1的BloomFilter数组。但是,由于您的BloomFilter似乎没有默认构造函数,您需要使用std::vector及其emplace_back函数,提出自己的相当复杂的方法,或者创建一个指针数组:

BloomFilter** TL_sigMem;

TL_sigMem = new BloomFilter*[sizeL1];

TL_sigMem[0] = new BloomFilter(...);
像这样:

#include <vector>

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

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

需要明确的是:你想让TL_sigMem成为一个BloomFilter对象数组,还是一个BloomFilter指针数组?@manabreak我想创建一个BloomFilter对象数组。在可以使用std::vector的情况下,不使用它是非常不明智的。虽然技术上是正确的,OP更喜欢一种不用STD::vector的解决方案。我想知道为什么C++不允许用非默认构造函数分配对象。你能解释一下背后的原因吗?@AryaMz我可能不是给你合理解释的人!这可能只是它最初的设计方式。顺便说一句,现代的C语言都不允许你这么做。
#include <vector>

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

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