newは引数でサイズを受けますが、標準のnewはsizeが0でも正しく動作することを規格で定めています。
自分で実装する際には意識するとちょっとだけ規格に準じたコードになってよいです。
1 2 3 4 5 6 |
void* operator new(std::size_t size) { if (size == 0) { size = 1; } return malloc(size); } |
これ豆な!
まとめ
- 標準のnewはサイズ0にも対応している
- 完全に準じるにはそこそこの知識が必要なので、せめてこれだけでも覚えておくと良い
- そんなレアケースに対応することでnewにコンペア命令が増えるなんて勿体無い!という人も教養として覚えておくと良い