破壊が必要な場合:
int main() {
int answer;
...
{ // << added braces
MEMORY_CONSUMING_DATA_ARRAY temp;
a few operations on the above;
answer=result of these operations;
}
... //More code
}
などの動的割り当てによってサポートされるコレクション/オブジェクトで機能しstd::vector
ます。
しかし、大きなスタック割り当ての場合...コンパイラに翻弄されます。コンパイラは、関数が戻った後にスタックをクリーンアップするのが最善であると判断するか、関数内で段階的にクリーンアップを実行する場合があります。私がクリーンアップと言うとき、私はあなたの関数が必要とするスタック割り当てを指しています - 破壊ではありません。
これを拡張するには:
動的割り当ての破棄:
int main() {
int answer;
...
{ // << added braces
std::vector<char> temp(BigNumber);
a few operations on the above;
answer=result of these operations;
// temp's destructor is called, and the allocation
// required for its elements returned
}
... //More code
}
対スタック割り当て:
int main() {
int answer;
...
{
char temp[BigNumber];
a few operations on the above;
answer=result of these operations;
}
// whether the region used by `temp` is reused
// before the function returns is not specified
// by the language. it may or may not, depending
// on the compiler, targeted architecture or
// optimization level.
... //More code
}