为什么被破坏的对象比创建的多
why are more destroyed objects than created
我是 c++ 的新手,并试图了解复制值或传递引用的成本,在我的示例中,我发现虽然有一段代码对我来说很难理解:
考虑这个例子:
struct Foo {
Foo(int x) :
internVal { x } {
std::cout << "Con: " << std::endl;
}
~Foo() {
std::cout << "Des: " << std::endl;
}
int getVal() const {
return internVal;
}
private:
int internVal { 0 };
};
现在当我这样做时:
int main(int argc, char **argv) {
{
Foo a { 111 };
Foo b { 6555 };
Foo c { -444 };
std::cout << " Foos created..." << std::endl;
std::vector<Foo> vector_Test { };
vector_Test.push_back(a);
vector_Test.push_back(b);
vector_Test.push_back(c);
std::cout << " Foos added..." << std::endl;
for (const auto& d : vector_Test) {
std::cout << "-----" << d.getVal() << "-----" << std::endl;
}
std::cout << " Foos printed..." << std::endl;
}
std::cout << " Foos out of scope..." << std::endl;
std::cout << "end!" << std::endl;
//
return 0;
}
我看到以下输出:
Con:
Con:
Con:
Foos created...
Des:
Des:
Des:
Foos added...
-----111-----
-----6555-----
------444-----
Foos printed...
Des:
Des:
Des:
Des:
Des:
Des:
Foos out of scope...
end!
所以我的问题是为什么更多的对象在创建时被销毁?
我希望是偶数...如果我直接/间接创建 3 个对象然后销毁 3 个对象
我是否有内存泄漏的地方?
谢谢
Ps: 我的编译器是 MinWG
当您执行 vector_Test.push_back(a);
时,您正在将实例的副本添加到向量中。
这意味着稍后这些副本和原始元素将被销毁。
我是 c++ 的新手,并试图了解复制值或传递引用的成本,在我的示例中,我发现虽然有一段代码对我来说很难理解:
考虑这个例子:
struct Foo {
Foo(int x) :
internVal { x } {
std::cout << "Con: " << std::endl;
}
~Foo() {
std::cout << "Des: " << std::endl;
}
int getVal() const {
return internVal;
}
private:
int internVal { 0 };
};
现在当我这样做时:
int main(int argc, char **argv) {
{
Foo a { 111 };
Foo b { 6555 };
Foo c { -444 };
std::cout << " Foos created..." << std::endl;
std::vector<Foo> vector_Test { };
vector_Test.push_back(a);
vector_Test.push_back(b);
vector_Test.push_back(c);
std::cout << " Foos added..." << std::endl;
for (const auto& d : vector_Test) {
std::cout << "-----" << d.getVal() << "-----" << std::endl;
}
std::cout << " Foos printed..." << std::endl;
}
std::cout << " Foos out of scope..." << std::endl;
std::cout << "end!" << std::endl;
//
return 0;
}
我看到以下输出:
Con:
Con:
Con:
Foos created...
Des:
Des:
Des:
Foos added...
-----111-----
-----6555-----
------444-----
Foos printed...
Des:
Des:
Des:
Des:
Des:
Des:
Foos out of scope...
end!
所以我的问题是为什么更多的对象在创建时被销毁?
我希望是偶数...如果我直接/间接创建 3 个对象然后销毁 3 个对象
我是否有内存泄漏的地方?
谢谢
Ps: 我的编译器是 MinWG
当您执行 vector_Test.push_back(a);
时,您正在将实例的副本添加到向量中。
这意味着稍后这些副本和原始元素将被销毁。