int *a = new(__FILE__, __LINE__) int;
コールは、void* operator new(size_t , const char *, unsigned int);
関数を呼び出すことができます。「new」という呼び出しは、ユーザー定義の配置割り当て関数をどのように呼び出しますか?
どのように動作しますか?
int *a = new(__FILE__, __LINE__) int;
コールは、void* operator new(size_t , const char *, unsigned int);
関数を呼び出すことができます。「new」という呼び出しは、ユーザー定義の配置割り当て関数をどのように呼び出しますか?
どのように動作しますか?
C++のすべての演算子には、特定の構文と意味の必要条件があり、それらは過負荷の後でも尊重されなければなりません。例えば。キャレット^
演算子にpower
を表すようにオーバーロードしても、代数では大文字になるような乗算*
よりも高い優先順位を持つことは期待できません。
new
オペレータの構文要件は次のとおりです。
new (arguments ... /*for specialized case*/) Type (initializer list);
new (arguments ... /*for specialized case*/) Type [size_t];
、void* operator new (std::size_t count, void* ptr);
1は、次のコード記述する必要があります使用することができるようにします。
int main()
{
char arr[sizeof(int)];
int *a = new(arr) int;
}
void* operator new (std::size_t count);
は、グリッジなしで呼び出すことができます。
int main()
{
int *a = new int;
}
だから、(それが自動的に型から推論)最初のものを除くすべての引数は、new
とtype
との間に配置されるべきであり、parenthesis
で囲まなければなりません。
だから、あなたの例int *a = new(__FILE__, __LINE__) int;
では、新の構文規則は、あなたがそれを述べたようにそれは文字通り作品...あのoperator new(std::size_t count, char const *, int)
を求めています。式 'new(__ FILE__、__LINE__)int'は内部的に' :: operator new'関数を対応するパラメータのリストで解決しようとします。 – AnT
[新しい表現](http://en.cppreference.com/w/cpp/language/new) – Bumzy