這段代碼中的析構函數和DeAllocate函數有什麼區別?析構函數和函數之間的區別是什麼?
我不明白它們對我來說看起來像是一樣的東西。它們完全一樣,爲什麼你需要像DeAllocate這樣的函數?析構函數具有自動調用的好處,但DeAllocate不會。
#include <iostream>
using namespace std;
const int SIZE=5;
class ARRAY_CLASS
{
public:
ARRAY_CLASS();//default constructor
~ARRAY_CLASS(); //destructor
void Add(int); //mutator
void Print(); //accessor
int * Get_Address(); //accessor
void DeAllocate(); //mutator
private:
int *A;
int count;
};
ARRAY_CLASS::ARRAY_CLASS()
{
cout<<"Default constructor has been called\n";
A = new int[SIZE];
count = 0;
}
ARRAY_CLASS::~ARRAY_CLASS()
{
cout<<"The Destructor has been Called!\n";
delete [ ] A;
A=0;
count = 0;
}
void ARRAY_CLASS::Add(int item)
{
if (count<SIZE)
A[count++]=item;
else
cout<<"Array Full\n";
}
void ARRAY_CLASS::Print()
{
for(int i=0; i<count; i++)
cout<<"A[i] = "<<A[i]<<endl;
}
int * ARRAY_CLASS::Get_Address()
{
return A;
}
void ARRAY_CLASS::DeAllocate()
{
delete [ ] A;
A = 0;
count = 0;
}
int main()
{
ARRAY_CLASS B;
B.Add(1);
B.Add(2);
B.Add(3);
B.Add(4);
B.Add(5);
B.Print();
ARRAY_CLASS A = B;
cout<<"A holds address location = "<<A.Get_Address()
<<" and B holds address location "<<B.Get_Address()<<endl;
B.DeAllocate();
A.Print();
return 0;
}
*析構函數具有自動調用的好處,但DeAllocate不會。*就是這樣。認真。除此之外,再看看。 RAII依賴於此。在大多數語言中都存在相同的概念,甚至是託管的概念(例如,在C#中將'IDisposable'與'using'結合起來使用)。這使我們的日常生活變得更好。 –
偏題:強烈推薦'A = nullptr;'over'A = 0;'。第一個意圖對於不經意的讀者來說更爲明顯。 – user4581301
'DeAllocate()'方法在這裏可能不應該存在。它使對象處於無效狀態。應該只有一個析構函數。 – EJP