問題タブ [temporary-objects]
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.
c++ - SWIGのPythonラッパー内の一時オブジェクトの存続期間(?)
2月12日編集
私は最近、いくつかのC++クラス用にSWIGで生成されたPythonラッパーを使用して奇妙なクラッシュを思いついた。SWIGとPythonを組み合わせることで、一時的な値をクリーンアップすることに熱心になっているようです。実際、非常に熱心なので、まだ使用されている間にクリーンアップされます。大幅に凝縮されたバージョンは次のようになります。
.iファイルでSWIG(1.3.37)を実行し、Pythonで次のようにします。
2番目の例では、のフィールドBar
を読み取る前に一時オブジェクトが破棄されているようです。gdbで物事を追いかけていると、これが明らかに起こっていることです。したがって、から読み取るまでに、C ++はすでに破棄されています(そして他のヒープ割り当てで上書きされています)。私の実際の状況では、これがセグメンテーション違反を引き起こしています。theFoo
value
.value
Bar().theFoo
.theFoo
ここに戻るExample.i
ためにファイルに追加できるSWIGディレクティブまたはトリックはありますか?Bar().theFoo.value
1
c++ - イニシャライザが一時的に破棄されるのはいつですか?
いくつかの質問に答えた後、私は今日この実験を構築しました
b
動的初期化によってfalse
設定する前に(ゼロ初期化の結果として)値があります。終了true
の初期化の前に一時が破棄された場合は、を出力します。それ以外の場合はを出力します。b
false
true
仕様によると、一時は完全な式の最後に破棄されます。これは、の初期化では順序付けられていないようですb
。だから私は疑問に思う
- 仕様では、実装が異なる実行の両方
false
で印刷することを許可していますか?true
Clangfalse
は上記を印刷し、GCCはを印刷しtrue
ます。これは私を混乱させます。順序を定義する仕様テキストを見逃しましたか?
c++ - c++一時オブジェクトの質問
これら2つの関数間で作成される一時オブジェクトの数に違いはありますか?
これは宿題の質問なので、コンパイラの最適化はないと想定してください。
java - Javaの一時配列に文を格納する方法は?
現在、テキスト ファイルからデータ (段落/文字列) のチャンクをかき集めて、新しいファイルに書き込んでいます。ただし、後でいくつかの条件を追加することを計画しているため、このデータのチャンクを取り出して一時配列にのみ保存し、条件が満たされた場合にファイルに書き出すことができるようにしたいと考えています。ただし、事前に配列のサイズを知らずにこれを配列に書き込む方法がわかりません。
誰にもアイデアはありますか?
c++ - N3290 C++ ドラフトでの一時的な有効期間
N3290 C++ ドラフトからのポイント、§ 12.2、5 番目のポイント、10 行目。
2 番目のコンテキストは、参照がテンポラリにバインドされる場合です。参照がバインドされている一時オブジェクト、または参照がバインドされているサブオブジェクトの完全なオブジェクトである一時オブジェクトは、次の例外を除き、参照の存続期間中持続します。
new-initializer (5.3.4) の参照への一時的なバインドは、new-initializer を含む full-expression が完了するまで持続します。[ 例:
— 例の終了 ] [ 注: これによりダングリング参照が導入される可能性があり、実装はそのような場合に警告を発行することをお勧めします。— エンドノート]
これは、C++03 と比較した場合の追加ポイントです。しかし、その例は私には理解できません。この点を他の例で説明していただけますか?
ダングリング参照と一時オブジェクトが何であり、std::pair
データ型が異なる可能性のある 2 つの値を保持することを知っています。
scala - ハッシュテーブルでget()メソッドを使用するときのscala速度?(一時的なOption()オブジェクトが生成されますか?)
いくつかのコードをScalaに変換しています。これは、非常に大量のデータを含む内部ループにあるコードであるため、高速である必要があり、ハッシュテーブルでキーを検索して確率を計算する必要があります。キーが見つかったかどうかによって、異なることを行う必要があります。「標準」イディオムを使用すると、コードは次のようになります。
しかし、これらすべての一時的なSome()オブジェクトが作成されてからガベージコレクションされるため、この種のコードが非常に遅くなるのではないかと心配しています。Scala2eの本は、スマートJVMがこれらを「最適化」して、コードが効率的に正しいことを行うようにすると主張していますが、これは実際にSunのJVMを使用して発生しますか?誰か知ってる?
c++ - 関数からの参照による戻りの結果を無視する
重要な結果といくつかの重要でない結果を返す関数があるとします。重要でない結果が参照によって返されるように宣言しました。
この関数を呼び出して計算を行いたいのですが、呼び出しサイトでは重要でない結果を無視したいと思います。私は次のようにそれを行うことができます:
ダミー変数を宣言せずに同じことを行う別の方法を検討したいと思います。
これにはメモリリーク(許容できない)がありますが、「ダミー」の名前よりも明確に(結果を無視して)私の意図を示すという利点があります。
だから、私がそれを次のように書いたらどうなるでしょう:
それは合法ですか?関数のコードが実行されたときに一時的な整数はまだ存在しますか?unique_ptr
代わりに使用する必要がありauto_ptr
ますか?
(コードのリファクタリングを提案しないでください。おそらくそうしますが、最初に、このようなものがどのように機能するかを理解したいと思います)
c++ - const_castに続いて、一時的にバインドされたref-to-constを変更しても大丈夫だと言っているのは正しいですか?
この件についての私の理解と結論を確認したいと思います。
IRCでは、次のように質問されました。
一時オブジェクトにバインドされて
const_cast
いる参照に受け入れられますか?const
翻訳:const
彼は一時的なものにバインドされたref-to-constを持っており、それを変更するためにその性質を捨てたいと思っています。
私の回答は、以前に同様の質問をしたことでした。そこでは、一時的なもの自体は本質的にではないため、参照の性質をconst
捨てconst
て、結果を通じてそれらを変更できるというコンセンサスが得られたようです。 。そして、その元のref-to-がまだ存在している限りconst
、これは一時的なものの存続期間に影響を与えません。
あれは:
私は正しいですか?
(もちろん、そのようなコードが実際に推奨されるかどうかはまったく別の問題です!)
c++ - static_castと一時的な作成(最終版)
前提条件: この質問を理解するには、最初に次の質問とその回答を読んでください 。auto_ptr<Base>をauto_ptr<Derived>にキャストします。
キャストで auto_ptr<Base>からauto_ptr<Derived>に、Steveは「static_castはauto_ptrを一時的なものにコピーするため、aSがリセットされ、一時的なものが(ステートメントの最後に)あるときにリソースが破棄されると答えました。 「」
static_cast
と呼ばれている間の一時的な作成のプロセスに興味があります。この効果を確認するために、トレースできるコードが必要です。static_cast<auto_ptr<Circle>> ...
コンパイルできないので使えないので、代わりにシミュレーションクラスを書いて、一時的な作成の過程を見る必要がありますauto_ptr
。
また、一時的な作成はコピーコンストラクターの呼び出しと密接に関連していることも理解しています。
の所有権の喪失は、ソースのフィールドを負の値にauto_ptr
設定するコピー割り当てでシミュレートされます(の単純な論理モデルが必要です)。_radius
auto_ptr
したがって、次のCircle
クラスをお勧めします。
Ok。ここでは、「所有権の譲渡」がで行われていることがわかりますc2 = c3
。しかし、で一時的な作成を行うことはできませんstatic_cast
。
問題は、一時オブジェクトの作成の小さなシミュレーションをどのように作成するstatic_cast
かです。
スティーブは、キャスト中に一時的なオブジェクトが作成されると信じています。私が欲しいのは、一時的な作成を示す例を書くことだけです。このターゲットには学術的な理由があります。
誰かが、参照されたトピックに投稿したスティーブの回答に記載されている効果を達成する方法を明確にすることができますか?
c++ - RValuesは何で構成されていますか?
RValueはメモリの操作可能な領域ではないため、整数などのリテラルはRValueと見なされます。
- 定数はRValueを構成しますか?
const int x = 0;
少なくとも1回は操作可能です。 - 現在、コンパイラーによって作成された一時オブジェクトは、操作可能なメモリー領域がある場合でもRValuesです。どうしてこんなことに?
「ユーザー」が変更できないので?これが理由ですか?
それで、「ユーザー」が操作できないメモリ領域はRValueと呼ばれますか?