我使用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超出范围时调用一次.
表达式A(1)是一个r值并构造一个新A值,然后编译器可以将其复制到一个临时对象中,以便绑定到constpush_back 所引用的引用.然后将引用绑定的临时值复制到由管理的存储中vector.
在许多情况下,允许编译器忽略临时对象,但不需要这样做.
| 归档时间: |
|
| 查看次数: |
221 次 |
| 最近记录: |