問題タブ [pass-by-value]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - (どのように)オブジェクト参照を使用する必要がありますか?
例を考えてみましょう。
会社のスタッフを処理するアプリケーションライブラリ。スタッフの詳細はCSVファイルに保存されます(これは例としてのみ使用されているため、これを判断しないでください)。
スタッフ情報を処理するクラスは次のとおりです(画像を提供するためにコードを非常に簡略化しています)。
現在、アプリケーションで使用されている参照はありません。すべてのオブジェクト変数は値渡しされます。これにはオーバーヘッドが発生する可能性があると思いました。したがって、すべてのEmployeeオブジェクトとTeamオブジェクトが作成されたら、それらへのすべての呼び出しを参照に変更してみました。例:
しかし、これによりメモリ使用量が一時的に増加し、私は驚きました。私が使用している例では、スタッフは200人しかいませんが、企業に対応する必要がある場合、これは数千以上になり、メモリ使用量はさらに増えると想像できます。
この例を考えていたとき、私は次のようなことができるORMを模倣しようとしました。
理想的には、「適切な」(初期?)オブジェクトはとにのみ格納されるStaff::$employees
ためStaff::$teams
、Staff::$teams_names['Team Name']
への参照になりStaff::$teams[n]
ます。同様に、などStaff_Team::$managers
への参照の配列になります。
しかし、私が述べたように、参照を使い始めるとすぐに、メモリ使用量が増加します。Staff::$employees
質問:
では、これをどのように処理する必要がありますか?
参照渡しを使用してメモリ使用量を気にする必要はありませんか、それとも値渡しを使用する必要がありますか?
この場合、どちらが優れているのか、そしてその理由は何ですか?
注1:私は(私が思うに)オブジェクトを値で渡すことと参照で渡すことの違いを理解しています。この例では、どちらが優れているかを尋ねているだけです。
注2:作成後にStaff_Employeeオブジェクトが操作される場合があります。おそらく非常に最小限です。
iphone - Objective-C メソッドは「値渡し」をサポートしていますか?
Objective-C メソッドは「値渡し」をサポートしていますか? または、より具体的に言うと、次のようになります。
- メソッドに渡されるパラメーターの既定の動作は参照渡しですか?
- はいの場合、状況によっては、これとは異なるものがありますか? たとえば、パラメーターがオブジェクトではなく基本的な int である場合などです。(または、これは目的 c には関係ありません)
- int などの基本変数の値渡しをサポートするメソッドを持つ方法はありますか?
- メソッドがオブジェクトの値渡しをサポートする方法はありますか? (ここではノーと仮定しますが、完全を期すために尋ねます。もちろん、メッセージ内で自分でコピーを作成することもできますが、このアプローチでは、これは客観的な c メソッドが提供するものではないと考えます。自作です)
ありがとう
c# - プロパティ-値または参照による?
私は:を公開する次のパブリックプロパティを持っていますArraylist
:
私が呼んでいる他の場所
これらは(プロパティを介して)プライベートArrayListに要素を追加しているようですが、_SpillageRiskDescriptions
これが問題を引き起こすと予想していました。したがって、プロパティは元の変数への参照を返し、値で渡さないと考えるのは正しいですか?これArrayList
は参照型だからですか?int
同じことが(たとえば)でも起こりますか?
php - 外部配列への再帰的なPHP関数の書き込み
ここに2つの質問があります。なぜこうなった?そして、それについて何ができるでしょうか?
申し訳ありませんが、質問は非常に長いですが、ほとんどはprint_r
出力されます!
基本的に、私はタグのフラット配列($tags
)から始めます。それぞれにid
(配列インデックス)とがname
ありparent_id
ます。次に、再帰的に繰り返し、$tags
すべての子タグを親内にネストします。(下記参照)
できます!(出力については以下を参照してください)。しかし、私が抱えている問題は、タグのフラット配列が、ネスト/再帰を実行する関数内から書き込まれていることです。(下記参照)
タグのフラット配列:
これは、子タグをネストするために再帰的に呼び出される関数です。問題は内部にありif
ます:私はそれに割り当て$tag
てからプロパティを$tree[$i]
追加します。children
これにより、children
プロパティがに追加され$tag
ます。これは私が起こらないようにしたいことです。
ネストされたタグの出力:
children
プロパティをに追加するとき、またはこれが発生しないよう$tree[$i]
に割り当てるときに、別の方法で何ができますか?$tag
$tree[$i]
ありがとう!
c - グローバル リンク リストに格納された (および他の関数でアクセスされた) ローカル構造体は、VC2010 で機能します。これは正しい C99/ANSI ですか?
次のコードは正常に動作します。
構造体は main 以外の関数でローカルに作成されますが、localstructtest() のスコープ外のリンク リストからデータを取得できました。ローカル変数はスタック上に作成されますが、これはこの構造体にも当てはまりますか? それとも実際にヒープ上に作成され、ポインター/参照は有効なままですか? テストしたとき、これはひどく失敗すると予想していました。私は C++ プログラマーであり、C に参照渡しがないことの影響をおそらく完全には理解していないことを認めます。このように構造体データを使用しても問題ない場合、データはいつ取得されますか?解放された?
ありがとう!
c++ - =演算子をオーバーロードすると、オブジェクトのディープコピーが返されます
=
そこで、整数のコンテナクラスを作成し、オブジェクトのディープコピーを返すことができるように、演算子をオーバーロードしたいと思います。私のコードは機能しますが、2つのオブジェクトが同じアドレスを指しています。これはmain.cppファイルです:
IntList
これは、クラスのヘッダーファイルです。
そして、これはIntClass
のoperator=()
メソッドの実装です。
c++ - 値と const 参照に基づく関数のオーバーロード
次のようなものを宣言しますか
理にかなっていますか?発信者はどのようにそれらを区別できますか? 私はもう試した
c - 値渡しのポインタを変更する
リンクされたリストの先頭ノードでfoo(struct node *n)
ある関数を指定しました。n
ここで、リストの最後を指す stfoo
を変更する必要があります。n
しかし、これはこの関数シグネチャで可能ですか?
t
リストの最後へのポインターであると仮定します。
n = t
ポインターが値渡しされるため、機能しません。*n = *t
リストの先頭を上書きするため、機能しません。
私は何か見落としてますか?
asp.net - IListをフィルタリングする
_PaymentMethods
はパブリックプロパティであり、そのコピーをフィルタリングして変数に格納したいと思いますpaymentOptions
ただし、これを2回実行すると、変数_PaymentMethods
には削除されたアイテムが含まれなくなります。
値ではなく参照によって行われるようです...リストを配列にコピーしたくないLinqを使用する必要がありますか、それとも他の方法がありますか?
編集:私は今これを持っています: