2017-08-19 2 views
-3

私はC++クラスのコンストラクタ、デストラクタ、およびメモリについて学習しています。私はクラス内のベクトルが欲しいです。私は、 "return magnitude - > at(dimension)"と書いたときにエラーが発生し続けます; "このコードに何か問題はありますか?一意のポインタクラスメンバー

編集: 申し訳ありませんが、エラーが "生のポインタの代わりにユニークなポインタに適用する"でした。これはClionからのものですが、おそらくIDEが間違っていますか?

エラー以外は、主にスマートポインタでラップするので、メモリリークはありませんか、それとも不可能ですか?デストラクタは常に呼び出されますか(残念ながら、デストラクタについてはまだ学んでいます)。

#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; 

    }; 
} 
+0

正確にはどのようなエラーですか? – HolyBlackCat

+0

正確なエラーメッセージとは何ですか?正確な問題を再現する[MCVE]を提供してください。 – user0042

+0

ここで 'unique_ptr'を使う必要はありません。 'std :: vector'自体は通常非常に小さく(おそらく12バイト程度)、その内容をヒープに格納します。 – HolyBlackCat

答えて

0

問題はここに

EuclideanVector(unsigned int size): magnitudes(std::make_unique(new std::vector<double>(size,0.0))){} 

変更するには、このラインである

EuclideanVector(unsigned int size): magnitudes(std::make_unique<std::vector<double>>(size,0.0)){} 

std::make_uniqueはテンプレートなので、newを使用する必要はありません。