Hi!
Folgende Situation:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
class A
{
protected:
int* b;
public:
A{}
~A{if(b!=nullptr)delete b;}
};
class CB : public A
{
public:
DoSomethingWithB();
};
//Irgendein Gültigkeitsbereich außerhalb von A und B
{
CB cb;
stdvector_which_contains_CB.push_back(cb);
}
//Irgendein Gültigkeitsbereich außerhalb von A und B
{
for(unsigned int i=0; i<stdvector_which_contains_CB.size(); ++i)
stdvector_which_contains_CB[i].DoSomethingWithB(); //Autsch!
}
|
Der Pointer b ist nicht mehr valide! Das liegt natürlich daran, dass ein temporäres Objekt erzeugt wird, der Pointer natürlich auch mit kopiert wird und somit auf die gleiche Stelle im Speicher zeigt, wie der des temporären Objekts, der Speicher jedoch, nach verlassen des Gültigkeitsbereiches, die Macht des delete-Operators zu spüren bekommt. Habe ich soweit die Problematik richtig erkannt?
Mein Problem ist, dass ich nicht weiß wie ich da "drum herum bauen" könnte. Mir erscheint das wie ein simples Fallbeispiel, weswegen ich hier mal fragen wollte.
Meine Idee wäre es, einen SmartPointer zu benutzen.
MfG
Check