私は C++ が初めてなので、ウィキペディアの例を参考にして学習しようとしています。クラスで少し遊んだところ、セグメンテーション違反エラーが発生しました。
これが私のコードです:
class SomeClass {};
class AnotherClass {
SomeClass* sc
public:
AnotherClass(SomeClass* SC):( sc = SC; ){}
//***********************************************************************
~AnotherClass(){ delete sc; } //here I'm getting rid of internal pointer
//***********************************************************************
};
int main( int argc, char* argv[] ) {
SomeClass* SC = new SomeClass();
AnotherClass* AC = new AnotherClass(SC);
delete AC;
// *****************************************************
delete SC; //i think that this line might cause an error
//******************************************************
return 0;
}
delete
ヒープメモリを解放するには、すべてのポインターを使用する必要があると思いました。私の間違いを指摘していただけませんか。
編集:
これが私の実際のコードです:
#include <iostream>
#include <string>
using namespace std;
class Pizza {
string dough;
public:
Pizza(string d):dough(d) {}
void setDough( string value ) { dough = value; }
string getDough() { return dough; }
};
class PizzaBuilder {
Pizza* pizza;
public:
PizzaBuilder( Pizza* p ) { pizza = p; }
~PizzaBuilder() { delete pizza; cout << "PizzaBuilder Destructor." << endl;}
PizzaBuilder* addExtra(string extra) {
string special = pizza->getDough() + " and extra " + extra;
pizza->setDough(special);
return this;
}
Pizza* getPizza() { return pizza; }
};
int main(int argc, char* argv[]) {
Pizza* p = new Pizza("My Special DOVE!");
PizzaBuilder* pb = new PizzaBuilder(p);
pb->addExtra("Mushrooms")->addExtra("Anchovies")->addExtra("Zefir")->addExtra("Chilli");
cout << p->getDough() << endl;
delete pb;
delete p;
return 0;
}