【发布时间】:2017-04-10 22:25:56
【问题描述】:
请看一下这段代码:
template <typename T>
class matrix
{
private:
std::vector<T> vec_;
public:
matrix(size_t rows , size_t cols) : rows_(rows) , cols_(cols) , vec_(rows_ * cols_)
{
}
size_t rows_;
size_t cols_;
};
这是一种声明类的方法。我只是想知道std::vector 分配在哪里以及它在哪里被初始化?
当我声明一个变量时会发生什么?它的空间是在调用构造函数之前在堆栈中分配的,还是在构造函数中分配和初始化的?
声明一个大小为10的向量有什么区别
std::vector<T> vec_(10);
并在构造函数中调用大小为 10 的 vec_ 的构造函数?
matrix() : vec_(10)
我想了解如何在 C++ 中分配和初始化对象。
我也可以创建构造函数而不调用std::vector的构造函数
matrix() {}
这里发生了什么?由于我没有调用向量的构造函数,编译器会调用它自己的构造函数吗?可以使用矢量对象吗?还是因为我将std::vector 声明为我班级中的变量而自动调用它?
还初始化为std::vector vec(10),与调用resize/reserve 的效果相同。离哪个更近?
【问题讨论】:
-
“这是一种声明类的方式”——不。这是一个模板的定义;模板是定义类的模式。
标签: c++ c++11 memory-management vector constructor