Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

1

26.11.2015, 17:20

[C++] Verständinisfrage zu delete[]

Hallo Leute,

ich wollte mal fragen, warum man manchmal delete[] und manchmal delete verwendet? Was ist der unterschied und warum schreibt man das zu löschende Objekt bei delete[] nicht in die [] Klammern, sondern dahinter?

Danke im Voraus :)

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

2

26.11.2015, 18:18

delete[] verwendest du, wenn du multiple Elemente mit new angefordert hast:

C-/C++-Quelltext

1
2
int* a = new int;
delete a;

versus

C-/C++-Quelltext

1
2
int* as = new int[2];
delete [] as;
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

3

26.11.2015, 20:22

Ah danke für die Klarstellung :thumbsup:

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

27.11.2015, 02:35

Vielleicht sollte man Ergänzen, dass es sich da nicht um eine Empfehlung handelt. Wenn du mit new ein Array anlegst, musst du es mit delete[] freigeben. Alles, was mit new erzeugt, aber kein Array ist, muss mit delete freigegeben werden, delete[] darfst du dafür nicht verwenden.

Statt explizitem new und delete verwendet man heutzutage besser std::make_unique().

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

5

27.11.2015, 06:34

std::make_unique().

Ja, aber Smart-Pointer kann ich nicht verwenden, wenn ich z.B. einen Pointer auf D3D11DeviceContext erstelle ;)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

27.11.2015, 06:43

Selbstverständlich kannst du das und solltest das auch unbedingt tun...

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
template <class T>
struct COM_deleter
{
  void operator ()(T* p) const
  {
    p->Release();
  }
};

template <class T>
using com_ptr = std::unique_ptr<T, COM_deleter<T>>;

template <class T>
inline com_ptr<t> make_com_ptr(T* p)
{
  return com_ptr<T>(p);
}


com_ptr<ID3D11Device> createDevice()
{
  ID3D11Device* device;
  if (FAILED(D3D11CreateDevice(..., &device, ...)))
    throw ...;
  return make_com_ptr(device);
}

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »dot« (27.11.2015, 06:55)


cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

7

27.11.2015, 07:08

Selbstverständlich kannst du das und solltest das auch unbedingt tun...

Oh das wusste ich nicht. Da war ich wohl nicht auf dem neusten Stand der Dinge :(. Danke für die Klarstellung :)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

27.11.2015, 07:10

In dem Fall solltest du dich wohl mal ausgiebig mit dem Stichwort "RAII" beschäftigen; Smartpointer sind nur ein Beispiel eines sehr viel allgemeineren Konzepts, das in C++ von fundamentaler Bedeutung ist...

cojo2015

Alter Hase

  • »cojo2015« ist der Autor dieses Themas

Beiträge: 516

Wohnort: bei mir zu Hause

Beruf: Schüler

  • Private Nachricht senden

9

27.11.2015, 07:11

In dem Fall solltest du dich wohl mal ausgiebig mit dem Stichwort "RAII" beschäftigen, Smartpointer sind nur eine konkrete Instanz eines sehr viel allgemeineren Konzepts, das in C++ von fundamentaler Bedeutung ist...

Ok, danke für die Hilfe :thumbsup: Ich werde micht heute mal damit genauer auseinandersetzen

Werbeanzeige