解除分配类的实例是否还释放由其对象/方法动态分配的任何内存?

时间:2015-09-28 07:52:50

标签: c++ memory-management

例如,尽可能简化:

class thing{
    public:
        char* arr;
        thing();
}

thing::thing{
    arr = new char[1000];
}

如果我创建一个动态分配的thing实例,然后用delete解除分配,那么构造函数动态分配的内存是否也会被释放,或者我是否必须释放{{1}首先?

2 个答案:

答案 0 :(得分:3)

不是那个类写的。您将需要声明一个执行<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="colourSelector" class="row"> <input id="backgroundcolor" name="backgroundcolor" size="6" maxlength="6" type="color" style="display: block;"> </div> <div id="lineHeight" class="row"> <select name="lineHeight" id="lineHeightSelect"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> </select> </div> <div id="divlineDemo" class="section row"> <hr id="lineDemo" style="height: 2px; background-color: red; border: 0;"> </div>的析构函数 - 您应该遵循一个或三个规则(如果添加移动语义,则遵循五个规则)。

答案 1 :(得分:1)

不,你会泄漏分配的数组。 char*当它超出范围时,它不知道它应该delete本身 - 它只是指向那个记忆。

如果您使用正确的工具来完成正确的工作,即将arr更改为unique_ptr,则thing会自动知道释放您分配给它的内存被解除分配。