【发布时间】:2017-08-19 10:57:17
【问题描述】:
我现在正在学习 C++ 类中的构造函数、析构函数和内存。我想要一个类中的向量。我在写“return muchs->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;
};
}
【问题讨论】:
-
究竟是什么错误?
-
确切的错误信息是什么?请提供一个minimal reproducible example 来重现确切的问题。
-
还要注意这里不需要使用
unique_ptr。std::vector本身通常非常小(大约 12 个字节左右),并将其内容存储在堆中。 -
您好,欢迎来到 StackOverflow。请花一些时间阅读帮助页面,尤其是名为"What topics can I ask about here?" 和"What types of questions should I avoid asking?" 的部分。更重要的是,请阅读the Stack Overflow question checklist。您可能还想了解Minimal, Complete, and Verifiable Examples。
-
magnitudes(std::make_unique<:vector>>(size,0.0))) 就足够了。
标签: c++ c++14 smart-pointers