【发布时间】:2022-01-22 02:32:35
【问题描述】:
我正在尝试使用参数化构造函数创建一个类的向量。
#include <iostream>
#include <vector>
using namespace std;
struct foo
{
foo() {
cout << "default foo constructor " << endl;
}
foo(int i)
{
cout << "parameterized foo constructor" << endl;
}
~foo() {
cout << "~foo destructor" << endl;
}
};
int main()
{
std::vector<foo> v(3,1);
}
我预计会有 3 次调用 parameterized foo constructor,但我得到的输出为
parameterized foo constructor
~foo destructor
~foo destructor
~foo destructor
~foo destructor
这里发生了什么?
如何使用向量的构造函数,以便通过参数化构造函数创建类对象?
【问题讨论】:
-
监控构造函数/析构函数调用时,不要忘记复制/移动构造函数。
-
有些相关:stackoverflow.com/q/28716209/4117728。不过,请注意,对于 C++11 及更高版本,它还不是最新的
-
请注意,
foo(int i)提供了从int到foo的隐式转换。在v(3, 1)中,第二个参数被隐式转换为foo(提供一行输出),并且该实例被复制3 次以填充向量(因此有4 个实例,4 个析构函数)。您未能提供打印任何内容的复制构造函数,编译器提供了一个根本不被注意的构造函数。
标签: c++ vector constructor