stl向量添加序列

np-*_*ard 1 c++

我使用borland 2006 c ++

class A
{
private:
    TObjectList* list;
    int myid;
public:
 __fastcall A(int);
 __fastcall ~A();
};

__fastcall A::A(int num)
{
    myid = num;
   list = new TObjectList();
}

__fastcall A::~A()
{
}

int main(int argc, char* argv[])
{
  myfunc();
  return 0;
}

void myfunc()
{
    vector<A> vec;
    vec.push_back(A(1));
}
Run Code Online (Sandbox Code Playgroud)

当我向向量添加一个新对象A时,它会调用它的析构函数两次,然后当vec超出范围时调用一次,所以总共调用3次.

我想它应该在添加对象时调用一次,然后在vec超出范围时调用一次.

CB *_*ley 6

表达式A(1)是一个r值并构造一个新A值,然后编译器可以将其复制到一个临时对象中,以便绑定到constpush_back 所引用的引用.然后将引用绑定的临时值复制到由管理的存储中vector.

在许多情况下,允许编译器忽略临时对象,但不需要这样做.