2016-06-28 9 views
0

私がカスタムデストラクタを定義している場合、すべての変数を手動で削除する必要がありますか?C++デストラクタの作成

mallocによって割り当てられたメモリは、デストラクタでfreeになるはずです。 mallocintによって割り当てられたメモリへのポインタはどうですか?
a.h:

#ifndef A_H 
#define A_H 
#include <stdlib.h> 
#include <iostream> 
#include <stdint.h> 
using namespace std; 

class A{ 
    public: 
    uint32_t x; 
    uint32_t* ar_y; 
    A(void); 
    ~A(void); 
}; 
#endif 

a.cpp:

#include "a.h" 
A::A(void){ 
    x = 0; 
    ar_y = (uint32_t*)(malloc(4)); 
} 
A::~A(void){ 
    // free the memory allocated by malloc 
    free(ar_y); 
    //Is it ok to do nothing for int* y and int x? 
} 

ます。test.cpp:

#include "a.h" 
int f(void){ 
    A objA; 
    //cout << objA.x << endl; 
    //Upon exiting the function 
    //destructor of A is called. 
} 
int main(void){ 
    uint32_t i; 
    // see if memory usage go crazy. 
    for (i = 0; i < 10000000000; i++) f(); 
} 

テスト結果:

メモリ使用量が夢中になって上昇しませんでした。

+0

delete [] yは割り当てられたメモリを解放します。 –

+1

@Bafforastaは、新しいものが使用されていましたが、それは確かに適切です。 – WhozCraig

+0

@WhozCraig私はちょうど彼がなぜしなかったのかさまよっていた –

答えて

3

xについては何もする必要はありません。 ar_yが指すメモリの割り当てを解除する必要があります。

クラスのメンバー変数にメモリを割り当てるときに必要な作業の詳細については、What is The Rule of Three?を参照してください。

あなたがC++の土地にしているので、代わりにmallocfreeを使用してのnewdelete演算子を使用することを好みます。

+0

Linuxで32ビットアライメントでメモリを割り当てなければならないのですが、C++でこれを行うにはどうすればよいですか? – rxu

+0

@rxu、[C++ 11での動的整列メモリ割り当て](http://stackoverflow.com/questions/6973995/dynamic-aligned-memory-allocation-in-c11)を参照してください。 –

+0

そう、私はそれが意味すると思います。 1.抽象レイヤーを書く。または2.パフォーマンスが非常に重要な場合に、整列したメモリの割り当てにポインターを使用する。 – rxu

関連する問題