【发布时间】:2014-02-05 21:39:05
【问题描述】:
假设我有一个类 A,它的构造函数需要一个参数 x。
class A
{
public:
int a;
A(int x) { a = x; std::cout << a << std::endl; }
~A() {}
};
现在我想分配一个 A 的数组,并将它包装在另一个类 B 中(实际上它应该是 A 的二维数组,映射到一维数组,这就是我需要包装它的原因)。由于 A 的构造函数需要参数,所以我不能使用 new[](……对吗?),所以我必须有一个 A**。另外我不想让B知道x,所以我的B是这样的:
class B
{
private:
A** As;
const int n;
public:
B(int nn): n(nn) { As = new A*[n]; }
~B() { delete[] As; }
A* at(int i) { return As[i]; }
const A* at(int i) const { return As[i]; }
};
请注意,“订阅运算符”松散地表示 at() 函数。现在我的主要功能是这样的:
int main()
{
B b(3);
int x = -1;
for(int i = 0; i < 3; i++)
{
b.at(i) = new A(x);
}
return 0;
}
当我用 g++ 编译它时,它会在我的“new”行打印一个错误“lvalue required as left operand of assignment”。然后我将 at() 的签名更改为
A*& at(int i)
它有效。
让我烦恼的是那个 A*&,我觉得这很奇怪……
这是我应该使用的 A*& 吗?或者任何其他处理对象数组的方法,其构造函数需要参数?顺便说一句,我们的目标机器上没有 c++11 和 boost…
【问题讨论】:
标签: c++ arrays pointers reference wrapper