タグ

2017年10月3日のブックマーク (3件)

  • C++メモ - new演算子の有無による宣言 | システムエンジニアの戯言

    Javaの場合 下のようなコードを実行すると、どうなると思いますか? List 1-1 String name; // 文字列クラスの変数を宣言する。 name.toString(); // nameはNullなので、ぬるぽ発生! name変数のコンストラクタが呼び出されていないため、NullPointerExceptionという例外が発生してしまいます。 これは、Javaに慣れた方ならご存知の事かと思います。 では、これを回避するには、どうしたら良いでしょうか? 下のように、new演算子で初期化しておけば、問題なく実行できますね。 (説明のため、便宜上new演算子を使用していますが、普通は""で初期化します。""を使用する方がメモリ効率の関係上有利です。) List 1-2 String name = new String("Hello World!"); // 文字列を代入する nam

    C++メモ - new演算子の有無による宣言 | システムエンジニアの戯言
    teppodone
    teppodone 2017/10/03
    “結論 該当スコープ内のみで使用する変数については、通常の宣言を行う。 該当スコープを超えてもなお、使用したい変数については、new演算子による宣言を行う。 ”#てぽめも
  • オブジェクト指向言語では、なぜnewでインスタンスを生成するのでしょうか。C言語の構造体のように、newせずに「クラス名hoge;」を書... - Yahoo!知恵袋

    オブジェクト指向言語では、なぜnewでインスタンスを生成するのでしょうか。C言語の構造体のように、newせずに「クラス名 hoge;」 を書くだけで、インスタンス生成と初期化(newの処理)をしてくれればいいのに。 オブジェクト指向言語では、なぜnewでインスタンスを生成するのでしょうか。C言語の構造体のように、newせずに「クラス名 hoge;」 を書くだけで、インスタンス生成と初期化(newの処理)をしてくれればいいのに。 例えば、 Class Dog { 略 } としてDogを定義して、コードの中で Dog pochi; と書くだけで、pochiインスタンスを生成(コンストラクタの実行)をしてほしいのですが、なぜ pochi = new Doc() みたいに、別途書かなければいけないのでしょうか。

    オブジェクト指向言語では、なぜnewでインスタンスを生成するのでしょうか。C言語の構造体のように、newせずに「クラス名hoge;」を書... - Yahoo!知恵袋
    teppodone
    teppodone 2017/10/03
    newを使わないときはプログラム実行時にメモリ確保 new宣言したらオブジェクトが必要になった時(プログラムがその文を通った時)に生成される。⇒new使うのはメモリをケチるため #てぽめも
  • C++ 値渡し、ポインタ渡し、参照渡しを使い分けよう - Qiita

    PR: CADDiではバックエンドエンジニア、フロントエンジニア、アルゴリズムエンジニア、SRE等などを募集しています。 C++ では, 関数呼び出しの際, 引数の渡し方が大きく分けて 3 種類ある. それぞれ「値渡し」「ポインタ渡し」「参照渡し」だ. この内, 値渡しとそれ以外の使い方の違いについては初学者であってもそれなりに理解している人が多い. 一方で, ポインタ渡しと参照渡しの使い方の違いについてはあまり理解出来てない人が多い. 記事では各々の違いについて触れながら, 使用場面の違いについて説明していく. 値渡しの基 値渡しは主に int , float , bool , char 等の組み込み型を使う際によく用いる. 値渡しを行うと, 平たく言えばコピーが行われる1. int が引数であれば, その数値がコピーされるので, コピーされた引数を変更しても関数を呼び出した側の変数

    C++ 値渡し、ポインタ渡し、参照渡しを使い分けよう - Qiita
    teppodone
    teppodone 2017/10/03
    “参照渡しの基本 参照渡しは C には無く, C++ で新たに追加された記法である. その実態は殆どの場合, より安全で, 制約の厳しいポインタであると言って差し支えない.” #てぽめも