在另一个类中分配对象数组(C++)
Posted
技术标签:
【中文标题】在另一个类中分配对象数组(C++)【英文标题】:Allocating array of objects inside another class (C++) 【发布时间】:2014-11-09 05:25:45 【问题描述】:如何在另一个类的构造函数中分配对象数组?
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
。
【问题讨论】:
要明确一点:您希望TL_sigMem
是BloomFilter
对象的数组,还是BloomFilter
指针的数组?
@manabreak 我想创建BloomFilter
对象的数组。
std::vector
在可以用的时候不用是非常不聪明的。
【参考方案1】:
像这样:
#include <vector>
class RSig
public:
RSig(double rate, std::size_t len) : TL_sigMen(len, BloomFilter(rate))
private:
std::vector<BloomFilter> TL_sigMem;
;
【讨论】:
虽然技术上正确,但 OP 更喜欢不使用std::vector
的解决方案。【参考方案2】:
要创建一个对象数组,语法如下:
T* t = new T[<size>];
其中T
是类型,t
是数组的名称,<size>
是数组的大小。现在,根据您的情况,您希望这样做:
TL_sigMem = new BloomFilter[sizeL1];
这将创建一个大小为sizeL1
的BloomFilter
s 数组。但是,由于您的 BloomFilter
似乎没有默认构造函数,因此您需要使用 std::vector
及其 emplace_back()
函数,使用您自己的(相当复杂的)方法,或者创建一个指针数组而是:
BloomFilter** TL_sigMem;
TL_sigMem = new BloomFilter*[sizeL1];
TL_sigMem[0] = new BloomFilter(...);
【讨论】:
我想知道为什么 C++ 不允许使用非默认构造函数分配对象。你能解释一下这背后的原因吗? @AryaMz 我可能是错误的人,无法为您提供合理化的理由!这可能就是它最初设计的方式。 AFAIK,不过,没有一种现代的类 C 语言允许你这样做。以上是关于在另一个类中分配对象数组(C++)的主要内容,如果未能解决你的问题,请参考以下文章