Ich lerne jetzt über Konstruktoren, Destruktoren und Speicher in einer C++ - Klasse. Ich hätte gerne einen Vektor in einer Klasse. Ich bekomme immer einen Fehler, wenn ich "Return Magnituden-> at (dimension)" schreibe. Ist etwas nicht in Ordnung mit diesem Code?eindeutige Zeiger Klassenmitglied
Edit: Sorry, der Fehler war "Anwenden -> auf eindeutigen Zeiger anstelle von rohen Zeiger", das ist von Clion, vielleicht ist die IDE falsch?
Abgesehen von dem Fehler, wickle ich es hauptsächlich in einen intelligenten Zeiger, so dass es keinen Speicherverlust gibt, oder ist das nicht möglich? Wird der Destruktor immer aufgerufen (tut mir leid, immer noch etwas über Destruktoren zu lernen).
#include <iostream>
#include "EuclideanVector.h"
#include "../catch.hpp"
#include <memory>
namespace evec{
class EuclideanVector{
public:
//constructors
EuclideanVector(): EuclideanVector(1){};
EuclideanVector(unsigned int size): magnitudes(std::make_unique(new std::vector<double>(size,0.0))){}
double get(int dimension){
return magnitudes->at(dimension);
}
private:
std::unique_ptr<std::vector<double>> magnitudes;
};
}
Welcher Fehler genau? – HolyBlackCat
Was ist die genaue Fehlermeldung? Stellen Sie ein [MCVE] bereit, das das genaue Problem bitte reproduziert. – user0042
Beachten Sie auch, dass Sie 'unique_ptr' hier nicht verwenden müssen. 'std :: vector' selbst ist normalerweise sehr klein (wahrscheinlich 12 oder so Bytes) und speichert seinen Inhalt im Heap. – HolyBlackCat