例如,尽可能简化:
class thing{
public:
char* arr;
thing();
}
thing::thing{
arr = new char[1000];
}
如果我创建一个动态分配的thing
实例,然后用delete
解除分配,那么构造函数动态分配的内存是否也会被释放,或者我是否必须释放{{1}首先?
答案 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
会自动知道释放您分配给它的内存被解除分配。