C++:在类构造函数中填充向量后,向量成员被销毁

C++: Vector members destructed after vector populated in class constructor

本文关键字:向量 成员 填充 构造函数 C++      更新时间:2023-10-16

是的,我已经搜索过了,但找不到答案。我有一个向量,它是一个类的成员。这个向量在类构造函数中给定了一些值(在本例中只有1)。构造函数一完成,就会调用向量中对象的析构函数。

这是我正在处理的的一个简短而甜蜜的版本

test.h

Class test
{
  private:
    Vector<Sprite> sprites;
  public:
    test(item _something);
}

test.cpp

test::test(item _something);
{
  sprites.emplace_back(_device, tBank["TestTexture"]);
}

main.cpp

test testItem;
main()
{
  testItem = testItem(something);
  // This is where the destructor for sprite is called
}

我知道上面的代码不起作用,但这是正在发生的事情的简写。如果需要,我可以发布整个代码。不管怎样,我是在做什么疯狂的事吗?

首先,我假设testItem(something)实际上是指test(something)(还有许多其他明显的错误,例如,main()需要返回int,也就是说,这似乎不是真正的代码)。

将使用test(something)创建的临时对象分配给testItem时,对象将被复制或移动分配给testItem,然后,临时对象将被销毁。编译器没有太多其他选择。如果test类中没有复制构造函数或复制赋值,则可以移动包含的std::vector<Sprite>。由于这不是真正的代码,所以很难说。

您所经历的是意料之中的:

Type t;
t = Type(arg);

第二行创建一个具有给定参数的Type类型的对象,然后将其分配给t变量。在完整表达式的末尾,临时表达式被销毁。