어쩌면 이것은 바보 같은 질문 일지 모르지만, 나는 단지 물건을 엉망으로 만들고 싶지 않습니다. 나는이 구조체가 있다고 가정 :스마트 포인터없이 이중 삭제를 방지하는 방법은 무엇입니까?
struct Foo{
struct Bar { virtual int calc(int x) = 0; };
Bar* barX;
Bar* barY;
int x,y;
Foo(Bar* bx,Bar* by) : barX(by),barY(by) {}
void process(int xx,int yy){
x = barX->calc(xx);
y = barY->calc(yy);
}
~Foo();
};
struct IDBar : Foo::Bar { int calc(int x) { return x; } };
int main() {
IDBar* b = new IDBar();
Foo f = Foo(b,b);
Foo f2 = Foo(new IDBar(),new IDBar());
}
나는 C++ 11 (즉, 더 smartpointers)를 사용할 수 없습니다를, 나는 100 % 확실하지 않다 ... 이 모두 (또는 가능 하나를 삭제하는 올바른 방법인가)이 Bar
객체 :
Foo::~Foo(){
if (barX == barY){ delete barX; }
else { delete barX; delete barY; }
}
?
추 신 : Foo
은 Bar
개체를 소유하고 있습니다 (그러므로 삭제할 책임이 있습니다). 생성자에 전달 된 Bar
은 다른 용도로 사용되지 않아야합니다. 실제로 Bar
은 하나의 Foo
에만 속할 수 있습니다 (결함은 나중에 만 실현되었지만 지금은 괜찮습니다). 또한 Foo
은 복사하지 않아야합니다 (아마도 내가 명시 적으로이를 방지해야합니다).
바를 소유 한 사람은 누구입니까? –
부스트 스마트 포인터는 어떻습니까? – KIIV
@KarolyHorvath Foo가 막대를 소유하고 있습니다. – user463035818