c++で
std:vector〈objectclass*〉vobj
があったとして
vectorの要素を
vobj.push_back(new objectclass)
のように追加しているとき
vobjのある要素を消したいです。
ただvobjの要素から外すだけではメモリリークになるのでdeleteも呼びたいです
この場合どう書けばいいのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
たとえばこんな?
C++
1#include <iostream> 2#include <vector> 3 4class foo { 5 int n_; 6public: 7 foo(int n) : n_(n) { std::cout << " foo(" << n_ << ")\n"; } 8 ~foo() { std::cout << "~foo(" << n_ << ")\n"; } 9 int get() const { return n_; } 10}; 11 12int main(){ 13 std::vector<foo*> vec; 14 for ( int i = 0; i < 10; ++i ) { 15 vec.push_back(new foo(i)); 16 } 17 std::cout << "奇数を削除\n"; 18 for ( auto iter = vec.begin(); iter != vec.end(); ) { 19 if ( (*iter)->get() % 2 ) { 20 delete *iter; 21 iter = vec.erase(iter); 22 } else { 23 ++iter; 24 } 25 } 26 std::cout << "残ったのを削除\n"; 27 while ( !vec.empty() ) { 28 delete vec.back(); 29 vec.pop_back(); 30 } 31}
[別解]
C++
1#include <iostream> 2#include <vector> 3#include <memory> 4 5class foo { 6 int n_; 7public: 8 foo(int n) : n_(n) { std::cout << " foo(" << n_ << ")\n"; } 9 ~foo() { std::cout << "~foo(" << n_ << ")\n"; } 10 int get() const { return n_; } 11}; 12 13int main(){ 14 std::vector<std::unique_ptr<foo>> vec; 15 for ( int i = 0; i < 10; ++i ) { 16 vec.push_back(std::make_unique<foo>(i)); 17 } 18 std::cout << "奇数を削除\n"; 19 for ( auto iter = vec.begin(); iter != vec.end(); ) { 20 if ( (*iter)->get() % 2 ) { 21 iter = vec.erase(iter); 22 } else { 23 ++iter; 24 } 25 } 26 std::cout << "残ったのを削除\n"; 27 while ( !vec.empty() ) { 28 vec.pop_back(); 29 } 30}
投稿2021/04/13 12:28
編集2021/04/13 15:08総合スコア16612
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/14 00:00