我正在进行这种单元测试。我想删除钻头和电池,但它似乎不起作用(可能不能删除电池)。我可以在析构函数上做任何事情来处理这个问题吗?
void test_rover::testDisconnectBattery() {
Drill* drill = new Drill();
drill->connectBattery(new Battery(10));
drill->disconnectBattery();
//CPPUNIT_ASSERT(drill->Connected()==false);
delete drill;
CPPUNIT_ASSERT(Object::getCount()==0);
}
Device.cpp(设备是钻取的基础)
Device::Device() {
}
Device::Device(const Device& copy) {
}
Device::~Device() {
delete _battery;
}
void Device::connectBattery(Battery *b){
_battery = b;
}
void Device::disconnectBattery(){
_battery = NULL;
}
Battery.cpp
Battery::Battery(int power) {
_power = power;
}
Battery::Battery(const Battery& copy) {
}
Battery::~Battery() {
}
int Battery::Power(){
return _power;
}
答案 0 :(得分:0)
disconnectBattery
,它将指向电池的指针归零。然后当你delete drill
时,析构函数被调用但是指针为空,所以delete
命令什么都不做。
您正在处理的问题是所有权问题。什么代码"拥有"电池?如果它是钻头,那么钻头应该在完成时取消电池(在断开连接期间,在使指针归零之前)。如果其他一些代码拥有电池,则钻头不应该删除电池。您需要对此做出决定,以便您可以始终如一地实施所有权。