gpt4 book ai didi

c++ - STL vector 分配

转载 作者:太空狗 更新时间:2023-10-29 19:41:18 25 4
gpt4 key购买 nike

我想知道为什么 vector 模板执行两次分配,而实际上只有一次分配必要的。

例如这个:

#include <vector>
#include <iostream>

class A {
public:
A(const A &a) {
std::cout << "Calling copy constructor " << this << " " << &a << "\n";
}
A() {
std::cout << "Calling default constructor " << this << "\n";
}
~A() {
std::cout << "Calling destructor " << this << "\n";
}
};

int main(int argc, char **argv)
{
std::vector <A> Avec;

std::cout << "resize start\n";
Avec.resize(1);
std::cout << "resize end\n";

return 0;
}

输出:

resize startCalling default constructor 0x7fff9a34191fCalling copy constructor 0x1569010 0x7fff9a34191fCalling destructor 0x7fff9a34191fresize end

最佳答案

它没有执行两次分配,它是由默认构造函数创建一个对象以传递给调整大小,然后将该对象复制到新位置,然后销毁参数。

如果您查看调整大小的参数:

void resize(n, t = T())

它的默认参数是一个类型为 T 的默认构造对象(这是在您的输出中调用的默认构造函数)。然后,在函数内,它将 this 复制到正确的位置(这是复制构造函数)。调整大小函数结束后,销毁参数(输出中的析构函数调用)。

关于c++ - STL vector 分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1007597/

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