【发布时间】:2012-06-09 20:42:43
【问题描述】:
我有以下代码:
void testCopy(){
Balloon* b1=new Balloon(1,5,6,3);
Balloon* b2=new Ballon(2,4,4,2);
cpyBallon(b1,b2);
assert(b1->getCenterx()==5);
cout<<" cpyBalloon() OK!\n";
}
cpyBalloon() 的代码是
void cpyBalloon(TCE& dest,TCE src){
Balloon* b=(Balloon*) src;
Balloon* d=new Balloon();
*d=*b;
dest=d;
}
如果 TCE 类型为 void*。 问题是我不知道如何将Balloon* 类型的对象b2 作为void*& 传递。我不断收到以下错误:
..\src\/Domain/BalloonTest.h:68:18: error: invalid initialization of reference of type 'void*& {aka void*&}' from expression of type 'domain::Balloon*'
..\src\/Domain/Balloon.h:102:10: error: in passing argument 1 of 'void domain::delBalloon(void*&)'
我知道 b2 是我遇到问题的论点,但我不知道如何使它起作用。
【问题讨论】:
-
Holyjesus 可怕的代码。
-
@DeadMG 对吧? daknok 编写更好的代码。 :Đ
-
您知道您的
testCopy代码会泄漏内存吗?具体来说,它泄漏了 3 个气球对象——两个分配在testCopy中,一个分配在cpyBalloon中。其中,第一行中分配的泄漏似乎是最严重的泄漏,因为它在testCopy函数结束之前已经无法访问。 -
是的,我知道它仍然有问题,但首先我想解决这个问题。
-
糟糕的代码?将 Balloon* 分配给 TCE& 有什么问题?您总是可以创建一个转换构造函数或运算符——或者,更好的是,一个 TCE::operator= 重载——来编译并执行……嗯,几乎任何你想要的。而 cpyBallon 是 copyBalloon 的一个很好的缩写,因为它节省了输入的两个字符,并且它们是三个 O 中的两个,这使得它特别容易记住。
标签: c++ void void-pointers