Schwierigkeiten beim Zugriff über Smartpointer
-
Hallo,
ich habe mit einem Smartpointer Speicher für 10 Integer-Variablen erzeugt. Wie kann ich darauf zugreifen?
Der Code funktioniert nicht. Ich dachte, dass mit Ausnahme der Deklaration des Smartpointers so ist wie mit einem normalen Zeiger.#include <memory> int main() { std::shared_ptr<int> sp(new int[10]); *(sp+1)=2; sp[1]=3; return 0; }
-
Der Standardsmartpointer für Arrays heißt std::vector.
Der Code funktioniert nicht.
ist keine Fehlerbeschreibung.
-
Hi,
erstmal bin ich mir nicht ganz sicher,
ich glaube aber je nach C++ Version vielleicht aber auch noch in C++20 aber auf jedenfall in C++14 muss du für den Fall auch einen eigenen deleter schreibenstd::shared_ptr<int> sp(new int[10],[](int *p) { delete[] p; })
Der Rest sollte aber ab c++ 17 funktionieren!
Grüße,
-
@manni66
Ja, ich weiss, dass ich das mit vector lösen kann. Mir geht es lediglich um das Verständnis von Smartpointern. Es geht nicht um eine konkrete Problemlösung.
Ich dachte nur, dass man mit Smartpointer das ersetzen könnte:... int *p=new int[10]; p[1]=4; delete[] p; ...
Der Code von meinem ersten Beitrag lässt sich nicht kompilieren.
main.cpp:14:6: error: no match for ‘operator+’ (operand types are ‘std::shared_ptr’ and ‘int’)
*(sp+1)=2;
bzw.
main.cpp:15:4: error: no match for ‘operator[]’ (operand types are ‘std::shared_ptr’ and ‘int’)
sp[1]=3;Habe es mit https://www.onlinegdb.com/online_c++_compiler ausprobiert.
Habe selber keine Compiler zur Hand.
-
@pmqtt sagte in Schwierigkeiten beim Zugriff über Smartpointer:
ich glaube aber
#include <memory> int main() { std::shared_ptr<int[]> sp(new int[10]); sp[1] = 2; sp[2] = 3; }
-
@asd1 sagte in Schwierigkeiten beim Zugriff über Smartpointer:
@manni66
Ja, ich weiss, dass ich das mit vector lösen kann. Mir geht es lediglich um das Verständnis von Smartpointern. Es geht nicht um eine konkrete Problemlösung.
Ich dachte nur, dass man mit Smartpointer das ersetzen könnte:... int *p=new int[10]; p[1]=4; delete[] p; ...
Der Code von meinem ersten Beitrag lässt sich nicht kompilieren.
main.cpp:14:6: error: no match for ‘operator+’ (operand types are ‘std::shared_ptr’ and ‘int’)
*(sp+1)=2;
bzw.
main.cpp:15:4: error: no match for ‘operator[]’ (operand types are ‘std::shared_ptr’ and ‘int’)
sp[1]=3;Habe es mit https://www.onlinegdb.com/online_c++_compiler ausprobiert.
Habe selber keine Compiler zur Hand.@Swordfish sagte in Schwierigkeiten beim Zugriff über Smartpointer:
@pmqtt sagte in Schwierigkeiten beim Zugriff über Smartpointer:
ich glaube aber
#include <memory> int main() { std::shared_ptr<int[]> sp(new int[10]); sp[1] = 2; sp[2] = 3; }
Was möchtest du damit sagen ( ist freundlich gemeint )?
-
@pmqtt Da brauchts keinen custom delet0r wenn man den richtigen Typ nimmt. Und dann gibts auch
operator[]()
.
-