C ++:在类构造函数中填充的向量之后被解构的向量成员

时间:2013-12-06 22:05:45

标签: c++ c++11 vector

是的我已经搜索过,但我找不到答案。我有一个类的成员向量。这个向量在类构造函数中给出了一些值(在本例中只是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
}

我知道上面的代码不起作用,但它是正在发生的事情的简写。如果要求,我可以发布整件事。无论如何我在疯狂吗?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

您的体验是预期的:

Type t;
t = Type(arg);

第二行使用给定的参数创建类型为Type的对象,然后将其分配给t变量。在完整表达式结束时,临时文件将被销毁。