首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C++中删除附着了另一个对象的对象?

如何在C++中删除附着了另一个对象的对象?
EN

Stack Overflow用户
提问于 2015-10-31 00:30:32
回答 1查看 39关注 0票数 0

我正在做这个单元测试。我想删除钻头和电池,但它似乎不能工作(电池可能无法删除)。我能在析构函数上做些什么来处理这个问题吗?

代码语言:javascript
复制
 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 (设备是钻机的基础)

代码语言:javascript
复制
    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

代码语言:javascript
复制
Battery::Battery(int power) {
    _power = power;
}

Battery::Battery(const Battery& copy) {
}

Battery::~Battery() {
}

int Battery::Power(){
    return _power;
}
EN

回答 1

Stack Overflow用户

发布于 2015-10-31 00:35:43

首先调用disconnectBattery,它会将指向电池的指针清空。然后,当您执行delete drill时,析构函数会被调用,但指针为空,因此delete命令什么也不做。

您正在处理的问题是所有权问题。什么代码“拥有”电池?如果是电钻,那么电钻应该在使用完电池后将其删除(在断开连接期间,在清除指针之前)。如果其他代码拥有电池,那么drill就不应该删除电池。你需要对此做出决定,这样你才能一致地实现所有权。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33440694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档