2017-06-16 6 views
0

私はこのSOの問題を読んでいますWhen is it best to use the stack instead of the heap and vice versa?、 スタックには限られたサイズしかないので、スタックに大きなオブジェクトを割り当てることはできません。コンテナにオブジェクトをプッシュし、私はいくつかのコードを持っている C++は、コンテナにプッシュするときにクラスオブジェクトをスタックまたはヒープに作成しますか?

http://cpp.sh/9xxea

だから、私は別のを好むべきで、オンラインIDEにこのリンクを参照してください?

void AddPerson(const CPerson& p) 
{ 
    std::cout << "push back" << std::endl; 
    persons.push_back(p); 
    std::cout << "size " << persons.size() << std::endl; 
} 
void AddPerson() 
{ 
    CPerson cp(10, "kit"); 
    std::cout << "push back" << std::endl; 
    //I know push_back will copy the element and push the copied object(which is created on heap ?), when function returns, cp will be "freed". 
    //so this function is better than function AddPerson(const CPerson&) ? 
    persons.push_back(cp); 
    std::cout << "size " << persons.size() << std::endl; 
} 
std::vector<CPerson> persons; 
+0

リンクに含まれていない質問にコードを挿入します。 TIA。 – Borgleader

+0

コンテナにプッシュしている場合は、とにかくヒープで終了します。 – Kimi

+0

@Borgleader編集 –

答えて

1

だから、私は別のを好むでしょうか?

オブジェクトを別々に作成しないことをお勧めします。スタックもヒープもありません。

言っ
persons.emplace_back(10, "kit"); 

CPersonは非常に小さいですし、数十万人に合う(以下、あなたのスタックのサイズに大幅に依存)スタック上にそれらを、私ことができます直接ベクターにオブジェクトを作成します。それがそうであるかどうかは心配しないでしょう。

関連する問題