リンクリストを作成しようとしていますが、関数内でオブジェクトを作成してポインタにアドレスを割り当てるのに問題があります。関数は終了します。これは本当ですか?もしそうなら、どうすればメイン以外のオブジェクトを作成し、それを使用することができますか?main()関数の外部で作成されたオブジェクトのアドレスを返す
0
A
答えて
0
新しい演算子でオブジェクトを作成します。 ie
void foo(myObject* bar1, myObject* bar2)
{
bar1 = new myObject();
bar2 = new myObject();
// do something
}
int main(int argc, char* argv[])
{
myObject* thing1;
myObject* thing2;
foo(thing1, thing2);
// Don't forget to release the memory!
delete thing1;
delete thing2;
return 0;
}
3
正しいですが、ローカル変数は関数ブロックの最後にスコープから外れます。オブジェクトへのポインタを作成し、newでそれらを割り当てる必要があります。そして、あなたがあなたのリストからそれを削除するとき、オブジェクトを削除することを忘れないでください。
ポインタに付随する手間とバグに対処したくない場合は、代わりにboost::shared_ptrを参照してください。あなたのリストが破棄されると削除をobjectに
void f()
{
CMyObject *p = new CMyObject();
List.AddTail(p); // Or whatever call adds the opbject to the list
}
ご注意:
2
は、new演算子を使用します。
0
リストにオブジェクトを(オブジェクトへのポインタではなく)保存しないのはなぜですか?作成者関数はオブジェクトを返します。
ポインタのリストが本当に必要な場合は、特別なポインタリストコンテナ(boost::ptr_list
)を使用するか、スマートポインタを格納することを検討してください(boost::shared_ptr
)。関数から返ってオブジェクトがスコープから外れるのを防ぐには、それらをnew演算子で動的に割り当てる必要があります。
0
受け入れられる回答は正しくありません。関数内で
void foo(myObject* bar1, myObject* bar2)
{
bar1 = new myObject();
bar2 = new myObject();
// do something
}
新しく割り当てられたオブジェクトはローカル変数に割り当てられます。呼び出し関数内のポインタの値には影響しません。あなたが必要なもの
int main(int argc, char* argv[])
{
myObject* thing1;
myObject* thing2;
foo(thing1, thing2); // thing1 and thing2 don't get assigned
// They continue to be uninitialized in
// this function
// Don't forget to release the memory!
delete thing1; // These two deletes will lead to undefined behavior.
delete thing2;
return 0;
}
は次のとおりです。
void foo(myObject*& bar1, myObject*& bar2)
{
bar1 = new myObject(); // Now the value of the pointers in the calling
bar2 = new myObject(); // will be changed since the pointers are passed by reference.
// do something
}
関連する問題
- 1. C++ main()関数の外部でクラスのインスタンスを作成する
- 2. Java - mainメソッドの外で作成されたオブジェクトの使い方
- 3. 外部関数から内部関数に返されたIDを渡す
- 4. 関数外の関数内で作成されたpandas DataFrameを使用する
- 5. C#関数内でstackallocで作成されたポインタを返す
- 6. 引数で指定された型のオブジェクトを返す関数
- 7. 外部PHPファイルの関数を返す
- 8. 関数で宣言された配列を返すと、Cのローカル変数のアドレスが返されますか?
- 9. main関数の返り値は例外を発生させます
- 10. stream.mapで定義された関数の疑似オブジェクトを返す
- 11. ローカルポインタ変数のアドレスをmain()関数に戻す
- 12. cの関数で外部IPアドレスを取得
- 13. 作成オブジェクトから作成されたColdfusion WebService - アドレスの場所の変更
- 14. pythonでmain関数を作成し、引数を渡します。
- 15. 動的に作成された関数を返す
- 16. hibernateオブジェクトの外部ライブラリの作成
- 17. 動的に作成されたオブジェクトを関数に渡す
- 18. Prestashop - 外部サイトのウェブサービスで作成されたカートを実現
- 19. 外部クラスオブジェクトが外部クラスの外部に作成された場合の外部クラスオブジェクトの参照
- 20. main関数で宣言された変数の範囲は?
- 21. javascript - ネストされた関数の外部関数をキャッチできません
- 22. 関数の内部で作成されたイベントリスナを削除しますか? (JavaScript)
- 23. 作成されたオブジェクトで別の関数を呼び出した後にJavascriptで作成されたオブジェクトのプロパティ値が定義されていません
- 24. 別の関数で作成されたオブジェクトを呼び出す方法
- 25. 関数内で作成されたオブジェクト内のメソッドを呼び出す
- 26. 別の関数によって返されたときのmain関数の変数アクセス?
- 27. インスタンス化されたオブジェクトを返すPowershell関数...種類の?
- 28. インスタンスが作成されたときの静的変数のアドレス
- 29. 「外部」で作成されたoData success関数のコールバック関数の "内部"のビジーダイアログはどのくらい閉じていますか?
- 30. C++のmain()関数内で宣言されたクラス
はあなたにもいくつかのコードを投稿することができますか? – dirkgently