問題タブ [delete-operator]
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++ - C++で「これを削除」は許可されていますか?
delete this;
delete-statement がクラスのそのインスタンスで実行される最後のステートメントである場合、許可されますか? もちろん、this
-pointer によって表されるオブジェクトがnew
ly-created であることは確かです。
私は次のようなことを考えています:
これはできますか?
c++ - `delete` とポインタについて不明確
次のコードがあるとします。
最後の行は、その上の行とまったく同じことをしますね。だから私は今delete
、無効/NULL ポインターを ing しているでしょうか?
これがばかげた質問かもしれないことは理解していますが、それでも、安心が必要です。
c++ - g ++ダブルフリーまたは破損...しかし、どうやって?
コードに問題があるようで、問題を特定するのに役立つかどうか疑問に思いました... gdbとvalgrindを使用してみましたが、後者の方が便利ですが、それでもバグを修正できません。
以下は私のクラスのコードです(これは私の縮小版ですが、問題の主な本質は残っています):
/ * Vector.h * /
/ * PhysicalState.h * /
/ * PhysicalState.cpp * /
/ * Test.cpp * /
長さについて申し訳ありません。valgrindからの出力は次のとおりです。
これを手伝ってくれる人に事前に感謝しますそれは私を夢中にさせています!! GD。
PS:me =(* this); 何もない=0;
c++ - ポインタを解放する関数を記述し、それにNULLを割り当てる
私は最近のインタビューでこれを尋ねられました。基本的には、無料の機能とnullの割り当ての機能を組み合わせる関数を作成しています。私は次のように答えました:
したがって、実行後、関数から返すときにptr
ローカルtomain
はnull値を保持しますnewdelete
。NULL
newdelete関数で割り当てたばかりの場合、ptr
ローカルtonewdelete
はnullになり、ptr
ローカルtoはnullになりmain
ます。
私の解決策は正しかったと思います。インタビュアーもそれを受け入れました。しかし、彼は他の答えを期待していました。彼は、私が関数からを返さずNULL
、それでも望ましい結果を達成すると主張していました。
それを達成する方法はありますか?私が考えることができるのは、ptr
ローカルのポインタへのポインタである別の引数を渡すことmain
だけですが、なぜそれが私がしたよりも優れているのかわかりません!
c++ - 同じオブジェクトへの2つのポインタでdeleteを呼び出す
書き込もうとしているいくつかのイベントハンドラークラスに問題があります。基本的には、オブジェクトの論理グループごとにイベントハンドラークラスを用意するという考え方です。ほとんどの場合、イベントはオブジェクトとそのハンドラーの間で発生しますが、場合によっては、イベントがハンドラーオブジェクト間でも送信されます。
イベントがスタックに配置されるようにコードを記述しました(ユーザーが作成した構造のようにスタックします。イベント自体はを使用して割り当てられますnew
)delete
。dは、情報が読み取られて処理された後です。あるケースでは、イベントが3つのハンドラーのチェーンに沿って送信されるため、これは私にいくつかの問題を与えています。たとえば、にHandlerA
を送信しますnew Event
。HandlerB
これは、スタックに配置して読み取り、に送信します。に送信するとHandlerC
、読み取りと実行に必要な処理が実行され、その後delete
、イベントポインタがに設定されNULL
ます。今、私たちは戻ってHandlerB
、まあ、それはまたしたいと思っていdelete
ますNULL
イベントへのポインタ。ただし、ポインタはローカル変数であり、同じアドレスを2回削除することになり、例外が発生します。
これをどのように回避しますか?あなたはそれらの派手なものの1つを使う必要がありますかauto_ptr
(まだここでは初期の学習者です)、それとも私はここで基本的な何かを逃していますか?
c++ - delete が何も破壊しないのはなぜですか?
メモリの動的割り当てで少し遊んでいますが、ポイントがわかりません。ステートメントでメモリを割り当てるときnew
、ポインターが指しているメモリを使用して破棄できるはずですdelete
。
しかし、試してみると、delete
ポインターが指しているスペースが空になっていないように見えるため、このコマンドは機能していないようです。
例として、この本当に基本的なコードを見てみましょう。
どんな手掛かり ?
javascript - JavaScript オブジェクトから偽物を削除する
そこで、偽の値を持つオブジェクトからメンバーを削除する短い関数を作成します。
数日後、ソース管理をチェックすると、誰かがこれを次のように変更しました:
チェックインに関するコメントはなく、その男は今日仕事でここにいません。
どちらの実装が優れていますか? 各メソッドのパフォーマンスへの影響は何ですか?
c++ - ダブル無料腐敗
クラスコールグリッドがあります。このクラスは、グリッドを格納するための 2 つの 2D char 配列を保持します。クラスには、グリッドのメモリを作成し、グリッドのメモリを解放するための 2 つの関数があります。
Grid.h
Grid.cpp
問題は、次のエラーを受け取るメモリの割り当て解除で発生しています。
私はすべてのポインターが実行中に他の何かに変更されていないこと、および考えられるすべてのチェックとバランスが儀式で行われていることを確認しました。私はここ数時間髪を引っ張っていますが、まだ何もありません.
ubuntu 10システムでgccでこれを実行しています。
また、この投稿の目的で名前などを変更し、価値があると思われるコードのみを含めたことにも注意してください。
編集:
構文の問題を修正しましたが、元のコードにはこれがあり、すぐに入力しただけで、校正はしていませんでした。
どんな助けでも大歓迎であり、私の本の金の星に値します. 私は非常にgdbの上級ユーザーであり、この問題でこれを使用しましたが、おそらく外部ライブラリの問題であると考えています。誰かがこのようなものを見たことを期待するだけで、メモリとそのスコープに問題は見られません。すべての目的で、このコードは問題ありません。
c++ - C++でポインタのstd::vectorを解放する正しい方法は何ですか?
StackOverflowを検索しましたが、この質問に対する答えが見つかりませんでした。
std::vector<Day *> vector_day
オブジェクトへのポインタのベクトルである-を持っていると仮定しDay
ます。今私push_back
はvector_day
多くの要素に:
今、ある時点で私はもう必要ありませんvector_day
。メモリを解放する正しい方法は何ですか?
これは正しい方法です:
これは、削除するたびにベクトルを無効にしませんか?私は非常に混乱しています。