我正在做这个单元测试。我想删除钻头和电池,但它似乎不能工作(电池可能无法删除)。我能在析构函数上做些什么来处理这个问题吗?
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;
}发布于 2015-10-31 00:35:43
首先调用disconnectBattery,它会将指向电池的指针清空。然后,当您执行delete drill时,析构函数会被调用,但指针为空,因此delete命令什么也不做。
您正在处理的问题是所有权问题。什么代码“拥有”电池?如果是电钻,那么电钻应该在使用完电池后将其删除(在断开连接期间,在清除指针之前)。如果其他代码拥有电池,那么drill就不应该删除电池。你需要对此做出决定,这样你才能一致地实现所有权。
https://stackoverflow.com/questions/33440694
复制相似问题