C++:对象可以被更早地销毁,以使其存储内存被后续对象重用吗?对象是否可以被更早的销毁,以使其存储内存可以被后续对象重用?
在C++代码一个段,在所述第一半部分,一个对象,使用B; 在下半部分,创建和使用对象c,d。
由于物体A,B占用大量的内存,我想手动销毁对象A,B上半年部分结束的时候。
我知道我可以使用新的,删除去实现它。
但是,如果我不使用新的,但还是要销毁对象较早(这意味着,范围的结束时间之前),我可以手动调用析构函数摧毁它?所以这部分内存可以重用于对象c和d。 (我不需要来释放内存,因为重用是罚款
下面是一个伪代码:。
monsterClass a, b;
dragonClass c, d;
int i,j,k,l;
a = monsterClass(1000, 2000);
b = monsterClass(2000, 3000);
i = processMethod1(a, b);
j = ...;
k = ...;
l = ...;
// here, I want to destroy a, b, since they are not used any more, while occupy memory.
// The above half part and the below half part use many common variables.
// So it seems scope {} method makes it inconvenient,
// since I don't want to create a function with too many parameters.
// I don't want to use new or delete here. I hope it looks simple and not prone to error
// So can I use: ~a, ~b here?
c = dragonClass(400, 3000);
d = dragonClass(500, 4000);
processMethod2(c, d, i);
j = ...;
k = ...;
l = ...;
[更新1]所以,大多数人建议使用范围,这是一个很好的方式 我还是很好奇,我可以使用〜a和〜b吗? 我觉得这似乎是一种可行和方便的方式。
[Update 2]我想到了另一种情况,在这种情况下,不同变量的作用域是交织在一起的!就像这样:a的范围有b的作用域的重叠,但它们不包括关系。它是部分重叠的关系。 在这种情况下,这是否意味着使用范围是不可能的? 最后的手段是使用新的和删除,对吧?
请添加代码的例子来解释为什么你必须销毁对象_before scope_其结束的时间。你总是可以添加额外的'{}'来定义更小的范围。 – timrau 2014-12-05 17:03:07
[您可以手动调用原始对象的析构函数,然后使用放置'new'在该内存之上创建一个新对象](http://stackoverflow.com/questions/2494471/c-is-it-可能对呼叫一个构造函数 - 直没有新)。如果你这样做,清楚地记录事情,因为它可能会严重混淆/误导代码的读者。 – Cornstalks 2014-12-05 17:04:16
你能否将这两个部分作为单独的功能实现?或在一个函数内单独的块?这比手动控制要简单得多(尽管如果你真的需要的话,这在某种程度上是可能的)。 – 2014-12-05 17:09:01