【发布时间】:2010-03-27 05:04:54
【问题描述】:
我在程序中有这样的语法
/* The Object1 is allowed to be changed */
class Object1 : BaseClass {
BaseClass *link;
int i;
public:
Object1(int a){i=a;}
Object1(int a, Object1 /*place1*/ o) {i=a; link= &o;}
};
int main(){
/* The initialization syntax must be preserved. No any new(), no other local objects b,c */
Object1 a(1, /*place2*/ Object1(2));
...
}
我需要什么?我想在第一个对象中保存指向第二个对象的链接(指针)。我应该在原地使用引用“&”吗?
什么类型的地方会有“Object1(2)”?它是匿名对象的构造函数吗?它会有“自动”存储类型吗?
谢谢
更新:
在place2中,语法是固定的,我真的必须支持创建“链”,比如
Object1 a(1, Object1(2, Object1(6, Object1(999753))));
我无法在 a 的定义中添加任何符号。
更新2:
对于 place1:Object1(int a, Object1 &o) {i=a; link= &o;} 和 Object1 a(1, Object1(2)); 在 place2 我有一个编译错误(g++):
main.cpp||In function `int main()':|
main.cpp|19|error: no matching function for call to `Object1::Object1(int, Object1)'|
main.cpp|9|note: candidates are: Object1::Object1(const Object1&)|
main.cpp|14|note: Object1::Object1(int, Object1&)|
main.cpp|13|note: Object1::Object1(int)|
【问题讨论】:
-
你的设计不行。在
a创建的那一刻,所有这些临时人员都会死去,而你没有任何工作可做。 -
我可以更改类 Object1,定义复制构造函数,将临时重新分配到堆并将 ptr 存储到堆。
-
是的,存储所提供对象的副本是一个更好的主意。
-
您不能将临时引用作为非常量引用。
-
@Dennis :我不明白他如何存储副本,除非它是基类的副本,在这种情况下,他会刮他的论点。