唯一指针 class 成员
unique pointer class member
我现在正在学习 C++ class 中的构造函数、析构函数和内存。我想要一个 class 内的向量。我在写 "return magnitudes->at(dimension); " 时总是出错,这段代码有问题吗?
编辑:
抱歉,错误是 "applying -> to unique pointer instead of raw pointer",这是来自 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;
};
}
问题在这里
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
。
我现在正在学习 C++ class 中的构造函数、析构函数和内存。我想要一个 class 内的向量。我在写 "return magnitudes->at(dimension); " 时总是出错,这段代码有问题吗?
编辑: 抱歉,错误是 "applying -> to unique pointer instead of raw pointer",这是来自 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;
};
}
问题在这里
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
。