class Cbase
{
public:
virtual ~Cbase(){};
int k;
};
class Cchild:public Cbase
{
public:
~Cchild(){};
double *p;
int f;
};
Ich habe zwei Klassen, ich glaube, dass die nächste Generation Instanz (Basis - Kind - Kind2 - ...), nimmt mehr und mehr Platz im Speicher. Dem Operator New teilen wir genau mit, wie viel Speicher zugewiesen werden soll, indem wir die Klasse in Parametern übergeben. Beim Löschoperator wird jedoch nicht genau angegeben, wie viel Speicher zugewiesen werden soll. Ausgehend von dieser Überlegung ist nicht ganz klar, was in der nächsten Situation passieren wird:
D.h. ich meine, wir haben *pClass als Zeiger auf Cbase (eine kleine Klasse im Vergleich zu Cchild) deklariert, aber er zeigt tatsächlich auf Cchild. Daher die Frage: Wie wird sichdelete() verhalten? Wird die Anzahl von Bytes freigegeben, die der Größe von Cbase entspricht (dann wird der Speicher verstopft), oder wird die Löschung korrekt durchgeführt?
P.S.: Nun, eine weitere Frage zum Thema: Gibt es irgendeine Kennzeichnung im zugewiesenen Speicherbereich (neu), mit der wir die Größe dieses Bereichs verstehen können (so etwas wie char wird mit Nullterminator am Ende gespeichert)? Oder anders ausgedrückt, kann ein Stück Code, das nichts über die Größe der von mir deklarierten Klassen weiß, korrekt Speicher freigeben?
Die Frage ist, wie wird sichdelete() verhalten? Wird eine Anzahl von Bytes freigegeben, die der Größe von Cbase entspricht (dann wird der Speicher verstopft), oder wird das Löschen korrekt durchgeführt?
Natürlich wird dadurch der Speicher korrekt freigegeben.
P.S.: Nun, eine weitere Frage zu diesem Thema: Gibt es irgendeine Kennzeichnung im zugewiesenen Speicherbereich (neu), durch die wir die Größe dieses Bereichs verstehen können (so etwas wie ein Zeichen, das mit einem Nullterminator am Ende gespeichert wird)? Oder anders ausgedrückt: Kann ein Codefragment, das nichts über die Größe der von mir deklarierten Klassen weiß, korrekt Speicher freigeben?
Natürlich wird es korrekt gelöscht. Sie können die Brickpoints auf die Destruktoren verteilen
Das ist in etwa der Punkt, auf den diese Frage hinausläuft. Ich habe es ungefähr so gemacht wie beschrieben (Destruktor war nicht virtuell), und Destruktoren unterhalb der Zeigerklasse wurden nicht aufgerufen.
Ich denke, sizeof funktioniert zur Kompilierzeit, aber ich spreche zum Beispiel davon, Speicher von einem anderen Prozess freizugeben. Wenn dies möglich ist, dann wäre die Löschfunktion verständlich.
Die Frage ist nicht einmal mehr, was wir in den Klassenfunktionen über new eingestellt haben, sondern über die Klassendaten ihrer "nativen" Mitglieder. Schließlich sind auch sie keine leeren Räume.
Aufgabe... Bitte legen Sie ein Signalmodul bei (ich habe keins). Schauen wir uns das mal an.
Noch merkwürdiger. Ich verstehe die Wirkung nicht.
Effekt nur während der Initialisierung, im Testgerät ist alles normal
OK, ich brauche es nicht, ich brauche es wirklich nicht.
Der Zickzack-Indikator liest Werte, die nicht mehr existieren (sie müssen vor dem Neuzeichnen vorhanden gewesen sein). Kann dies vermieden werden?
Wenn die Werte im Puffer sind, warum wird dann nicht wieder gezeichnet?
Guten Tag, bitte erklären Sie mir Folgendes:
Ich habe zwei Klassen, ich glaube, dass die nächste Generation Instanz (Basis - Kind - Kind2 - ...), nimmt mehr und mehr Platz im Speicher. Dem Operator New teilen wir genau mit, wie viel Speicher zugewiesen werden soll, indem wir die Klasse in Parametern übergeben. Beim Löschoperator wird jedoch nicht genau angegeben, wie viel Speicher zugewiesen werden soll. Ausgehend von dieser Überlegung ist nicht ganz klar, was in der nächsten Situation passieren wird:
D.h. ich meine, wir haben *pClass als Zeiger auf Cbase (eine kleine Klasse im Vergleich zu Cchild) deklariert, aber er zeigt tatsächlich auf Cchild. Daher die Frage: Wie wird sichdelete() verhalten? Wird die Anzahl von Bytes freigegeben, die der Größe von Cbase entspricht (dann wird der Speicher verstopft), oder wird die Löschung korrekt durchgeführt?
P.S.: Nun, eine weitere Frage zum Thema: Gibt es irgendeine Kennzeichnung im zugewiesenen Speicherbereich (neu), mit der wir die Größe dieses Bereichs verstehen können (so etwas wie char wird mit Nullterminator am Ende gespeichert)? Oder anders ausgedrückt, kann ein Stück Code, das nichts über die Größe der von mir deklarierten Klassen weiß, korrekt Speicher freigeben?
220Volt:
Die Frage ist, wie wird sichdelete() verhalten? Wird eine Anzahl von Bytes freigegeben, die der Größe von Cbase entspricht (dann wird der Speicher verstopft), oder wird das Löschen korrekt durchgeführt?
Natürlich wird dadurch der Speicher korrekt freigegeben.
P.S.: Nun, eine weitere Frage zu diesem Thema: Gibt es irgendeine Kennzeichnung im zugewiesenen Speicherbereich (neu), durch die wir die Größe dieses Bereichs verstehen können (so etwas wie ein Zeichen, das mit einem Nullterminator am Ende gespeichert wird)? Oder anders ausgedrückt: Kann ein Codefragment, das nichts über die Größe der von mir deklarierten Klassen weiß, korrekt Speicher freigeben?
Natürlich wird es korrekt gelöscht. Sie können die Brickpoints auf die Destruktoren verteilen
sizeof ?