0
假设我需要从另一个容器创建一个堆分配容器。初始容器是否需要堆分配,或者它的值是否隐式复制到堆中,因此原始容器可以只是一个局部变量?例如:堆分配对象构造函数
list<int> my_function()
{
set<int> my_set;
my_set.insert(1);
my_set.insert(2);
list<int> *my_list = new list<int>(my_set.begin(), my_set.end());
return *my_list;
}
与
list<int> my_function()
{
set<int> *my_set = new set<int>;
my_set->insert(1);
my_set->insert(2);
list<int> *my_list = new list<int>(my_set->begin(), my_set->end());
return *my_list;
}
哪以上是正确的?当然,我想避免在不知道的情况下复制堆内存。
感谢您的快速响应。我对C++相当陌生 - 对象构造函数是否隐式使用new?我很困惑,因为它看起来好像会返回一个局部变量,除非使用return关键字调用的构造函数增加了对象的范围。 –
STL容器需要分配数据来存储您添加的元素。内存分配在堆上。因此,如果你写'set my_set;'大部分数据已经存储在堆中。 –
Danvil
如果你写'A foo(){A a;返回一个; }'那么它会返回一个副本。对于STL容器,这可以进行优化。如果你想确保没有不必要的复制,你可以使用指针。但是,你必须注意调用delete或使用'shared_ptr'。 – Danvil