このコードは見つかりましたが、プロジェクトでなぜこのコードが動作するのか分かりません。コードの構造は以下の通りである:2つの引数を持ちながら代入なしでnew演算子を呼び出す
class MyClass {
int value;
};
struct MyStruct {
MyClass classA;
MyClass classB;
};
int main() {
MyStruct myStruct;
new (&((&myStruct)->classA)) MyClass();
new (&((&myStruct)->classB)) MyClass();
}
(インナーアンパサンドが小さい例を作成するために、私が追加されたソース体mystruct内のポインタです。)。
コンパイラは、たぶん私は重要な何かが欠けてい
In function int main()
error: no matching function for call to ‘operator new(sizetype, MyClass*)’
new (&((&myStruct)->classA)) MyClass();
^
note: candidates are:
note: void* operator new(long unsigned int)
note: candidate expects 1 argument, 2 provided
を言います。それは大きなプロジェクトです、私はそれをコピーすることはできません。 MWEを作成できません。私はこのコードの背後にある主な考え方と、それをコンパイルするために何を変えなければならないかを誰かに教えてくれることを願っています。
検索[_placement 'new'_](http://en.cppreference.com/w/cpp/memory/new/operator_new )。 – user0042
これは2つの 'MyClass'変数に' MyClass'クラスの新しいインスタンスを作成しています。 'MyStruct'構造体の' myStruct'には –
が含まれています。この '(&myStruct) - >'は意味がありません。少なくとも、私はそれがしないことを願っています。 – Quentin