[解決済み] クラスのインスタンスを作成する
2022-03-09 23:36:46
質問
1、2、3、4行目の違いは何ですか?
それぞれどのような場合に使用するのですか?
なぜ3行目は
constructor Foo
で、7行目はエラーを返し、8行目は返さないのですか?
#include <iostream>
using namespace std;
class Foo
{
public:
Foo ( )
{
cout << "constructor Foo\n";
}
};
class Bar
{
public:
Bar ( Foo )
{
cout << "constructor Bar\n";
}
};
int main()
{
/* 1 */ Foo* foo1 = new Foo ();
/* 2 */ Foo* foo2 = new Foo;
/* 3 */ Foo foo3;
/* 4 */ Foo foo4 = Foo::Foo();
/* 5 */ Bar* bar1 = new Bar ( *new Foo() );
/* 6 */ Bar* bar2 = new Bar ( *new Foo );
/* 7 */ Bar* bar3 = new Bar ( Foo foo5 );
/* 8 */ Bar* bar3 = new Bar ( Foo::Foo() );
return 1;
}
解決方法は?
/* 1 */ Foo* foo1 = new Foo ();
型のオブジェクトを作成します。
Foo
を動的メモリに格納します。
foo1
がそれを指します。通常、C++では生のポインターは使わず、スマートポインターを使います。もし
Foo
がPOD型だった場合、これは値の初期化を行うことになります(ここでは適用されません)。
/* 2 */ Foo* foo2 = new Foo;
という理由で、以前と同じです。
Foo
はPOD型ではありません。
/* 3 */ Foo foo3;
を作成します。
Foo
というオブジェクトを作成します。
foo3
を自動保存している。
/* 4 */ Foo foo4 = Foo::Foo();
コピー初期化を使って
Foo
というオブジェクトを作成します。
foo4
を自動保存している。
/* 5 */ Bar* bar1 = new Bar ( *new Foo() );
用途
Bar
の変換コンストラクタを使用して、型
Bar
を動的ストレージに格納します。
bar1
はそれへのポインタである。
/* 6 */ Bar* bar2 = new Bar ( *new Foo );
前と同じです。
/* 7 */ Bar* bar3 = new Bar ( Foo foo5 );
これは単なる無効な構文です。そこで変数を宣言することはできません。
/* 8 */ Bar* bar3 = new Bar ( Foo::Foo() );
があれば、5と6と同じ原理で動作し、機能する。
bar3
は7でオン宣言されていない。
5 & 6 はメモリリークを含んでいます。
のような構文です。
new Bar ( Foo::Foo() );
は普通ではありません。通常は
new Bar ( (Foo()) );
-
余分な括弧は、最も苛酷な解析のためのものです。
(訂正)
関連
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] Could not find or load main class "とはどういう意味ですか?
-
[解決済み] C++でクラスと構造体はいつ使い分けるべきか?
-
[解決済み] ベースクラスのコンストラクタを呼び出す際のルールは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン