gpt4 book ai didi

c++ - vector 、类和析构函数

转载 作者:行者123 更新时间:2023-11-27 23:56:37 25 4
gpt4 key购买 nike

这是我的类(class)

#include <iostream>
#include <vector>

class Base
{
public:
Base (int ind = 3)
:m_ind(ind)
{
std::cout<<"Base ()"<<std::endl;
}

virtual ~Base ()
{
std::cout<<"~Base ()"<<std::endl;
}
};

我在 main 中尝试了这段代码:

 Base(6)//literal base
  • 创建“文字”基,编译器打印“Base ()”
  • 因为它不是变量,只是一些内存,当编译器移出它时,它会删除分配给它的内存
  • 编译器会打印"~Base ()"

我尝试在主程序中运行这段代码:

std::vector<Base>vec;
vec.push_back(Base(4));

我的预期是:

  • 编译器创建 Base(4) 并将其存储在 vec.at(0)
  • 执行构造函数并在屏幕上打印"Base ()"
  • 当 main 函数结束时 “~Base ()” 打印在屏幕上

我得到的:

  • 编译器创建 Base(4) 并将其存储在 vec.at(0)
  • 执行构造函数并在屏幕上打印"Base ()"
  • Compiler移出并执行Destructor 打印“~Base()”
  • main 函数结束并打印"~Base ()"

这意味着 Base(4) 被插入 vector 时被删除,但是如果 vec.at(0) 是 Base(它在 vector 并且没有被删除)

最佳答案

当你做的时候

vec.push_back(Base(4));

您创建了一个临时对象。这个临时对象被传递给 push_back 函数,该函数将其复制移动到 vector 中(调用复制构造函数或者在你的类中移动构造函数)。然后 push_back 函数返回并销毁临时对象。

稍后当 vector 本身被销毁时,vector 中的拷贝将被销毁。

关于c++ - vector 、类和析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42246820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com