Ich kann nur ne Handvoll C und kein C++. Zuletzt musste ich mich aber dann doch mal mit etwas C++-Code beschäftigen. Dabei sind mir zwei Fragen gekommen, die ähnlich sind:
1.) Ich bin char-Arrays gewöhnt und weiß, wie sie im Speicher aussehen. Ob die Bytes auf dem Stack oder dem Heap alloziert werden, bestimme ich selbst. Wenn auf dem Heap mit
2.) Was ist ein <vector> im Speicher? Beispielsweise ein <vector> von std::strings, ist das ein Pointer auf Pointer? Muss ich einen <vector> nach der Verwendung zerstören?
Weiß jemand die Antworten oder eine Quelle, wo ich gezielt nachlesen kann? Irgendwie ist alles, was ich bisher gefunden habe nur auf die Anwendung dieser Konzepte beschränkt, ich will aber hinter die Kulissen schauen.
1.) Ich bin char-Arrays gewöhnt und weiß, wie sie im Speicher aussehen. Ob die Bytes auf dem Stack oder dem Heap alloziert werden, bestimme ich selbst. Wenn auf dem Heap mit
malloc()
, muss ich hinterher free()
n. Wenn ich stattdessen in C++ einen std::string erzeuge, was passiert dann? Wie sieht der String im Speicher aus? Ich habe das hier gefunden, was meine Fragen zum Teil beantwortet, aber: Ist ein std::string bloß ein Pointer auf ein char- oder wchar_t-Array? Was ist mit "Overhead" gemeint, ist ein std::string womöglich sowas wie ein SAFEARRAY unter Windows? Ist ein std::string nullterminiert? Muss ich einen std::string nach der Verwendung zerstören? Falls ja, wie? Und: Ist std::string eigentlich das Mittel der Wahl für Strings, oder ist das irgendwie veraltet? Falls die Antworten von der Platform abhängen: Ich bin mit Windows unterwegs.2.) Was ist ein <vector> im Speicher? Beispielsweise ein <vector> von std::strings, ist das ein Pointer auf Pointer? Muss ich einen <vector> nach der Verwendung zerstören?
Weiß jemand die Antworten oder eine Quelle, wo ich gezielt nachlesen kann? Irgendwie ist alles, was ich bisher gefunden habe nur auf die Anwendung dieser Konzepte beschränkt, ich will aber hinter die Kulissen schauen.