デストラクタは本質的に、メモリの割り当てを解除するか、使い終わったときに「クリーンアップ」を行う関数であることを知っています。
私の質問は、適切なデストラクタには何が入るのですか?
私が持っているクラスのコードをいくつか紹介しましょう。
#ifndef TRUCK_H__
#define TRUCK_H__
#include <iostream>
#include "printer.h"
#include "nameserver.h"
#include "bottlingplant.h"
using namespace std;
class BottlingPlant; // forward declaration
class Truck {
public:
Truck( Printer &prt,
NameServer &nameServer,
BottlingPlant &plant,
unsigned int numVendingMachines,
unsigned int maxStockPerFlavour );
~Truck();
void action();
private:
Printer* printer; // stores printer
NameServer* ns; // stores nameserver
BottlingPlant* bottlingPlant; // stores bottlingplant
unsigned int numVM; // stores number of vendingmachine
unsigned int maxStock; // stores maxStock
unsigned int cargo[4]; // stores the cargo.
};
コンストラクタは次のとおりです。
Truck::Truck( Printer &prt,
NameServer &nameServer,
BottlingPlant &plant,
unsigned int numVendingMachines,
unsigned int maxStockPerFlavour ) {
printer = &prt;
printer->print( Printer::Truck, 'S' );
ns = &nameServer;
bottlingPlant = &plant;
numVM = numVendingMachines;
maxStock = maxStockPerFlavour;
cargo[ 0 ] = 0;
cargo[ 1 ] = 0;
cargo[ 2 ] = 0;
cargo[ 3 ] = 0;
}//constructor
私のデストラクタ クラスでは、ポインタの後にクリーンアップする必要がありますか? つまり、それらを NULL に設定しますか? またはそれらを削除しますか?
すなわち
Truck::~Truck()
{
printer = NULL; // or should this be delete printer?
ns = NULL;
bottlingPlant = NULL;
// anything else? or is it fine to leave the pointers the way they are?
}//destructor
適切なデストラクタを作成する良い習慣を身につけたいだけです。