【发布时间】:2021-01-04 11:17:35
【问题描述】:
了解复制构造函数的概念我无法解释以下简单测试程序的调试输出:
#include <iostream>
#include <vector>
using std::cout, std::endl, std::vector;
class Module
{
private:
char *name;
public:
// ctor
Module(char n);
// copy ctor
Module(const Module &m);
// dtor
~Module();
};
Module::Module(char n)
{
name = new char;
*name = n;
cout << "ctor " << n << endl;
}
// copy ctor
Module::Module(const Module &m)
: Module{*m.name}
{
cout << "copy ctr " << *name << endl;
}
Module::~Module()
{
if (name != nullptr)
{
cout << "dtor " << *name << endl;
}
delete name;
}
int main()
{
vector<Module> vec;
vec.push_back(Module{'A'});
vec.push_back(Module{'B'});
return 0;
}
它的输出:
ctor A ctor A copy ctr A dtor A ctor B ctor B copy ctr B ctor A copy ctr A dtor A dtor B dtor A dtor B
我期待以下输出:
ctor A ctor A copy ctr A dtor A ctor B ctor B copy ctr B dtor B dtor A dtor B
如果有人知道我想知道这种行为的原因......
g++.exe(Rev5,由 MSYS2 项目构建)10.2.0
提前致谢!
【问题讨论】:
-
看来您假设内存(和对象)是由向量构造函数分配的。
push_back()也可以重新分配。
标签: c++ copy-constructor