堆分配的对象构造函数

Heap-allocated object constructors

本文关键字:构造函数 对象 分配      更新时间:2023-10-16

假设我需要从另一个容器创建一个堆分配容器。初始容器是否也需要堆分配,或者其值是否隐式复制到堆中,因此原始容器可以只是一个局部变量?例:

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;
}

以上哪项是正确的?当然,我想避免在我不知情的情况下复制堆内存。

这是正确的:

list<int> my_function()
{
    set<int> my_set;
    my_set.insert(1);
    my_set.insert(2);   
    return list<int>(my_set.begin(), my_set.end());
}

我不确定您所说的"已分配堆"是什么意思,但请记住,listset已经将数据存储在堆上。