2016-02-04 12 views

答えて

29

Box::newは他の機能と同様に機能します。それは決して特別なことではありません。それはぎこちなく、非常に近い有効期限のチーズの香りがかっこいい。

boxは、魔法のようなもので、小さな子供たちの夢や夢を形にしています。それは、最も洗練された、最もすばらしい服で服を着て、新鮮な松の木のかすかな香りをそれと共に運びます。それが関数であるので、あなたは、Box::new(e)を実行すると

eは完全に評価し、それがコールを開始することができます前を構築する必要があります。これはスタックに500kB構造体を割り当てて充填することを意味する場合、スタック上に500kB構造体を割り当てて、、次にBox::newに渡す必要があります。の場合にのみは、失敗する可能性があります)、、次にが500kBをヒープにコピーします。

それは暑い夏の日の涼しい風のように素晴らしいですので、あなたが、box eを実行し、コンパイラはそれは500KB構造を充填、ヒープ上、その後を500KBを割り当てることによってを開始するようなものを並べ替えることができますヒープ上に直接。そしてそれが終わった。余分なコピーがなく、スタックスペースを噛んだりしません。その「ヒープに割り当てる」ことがうまくいかない場合、無駄な努力を必要としません。

boxは、boxが大好きです。すべての雹box

(そして、はい、書き込みのように、それはまだあなたがその輝きに浴するために毎晩コンパイラを必要があることを意味している不安定なのです。しかし、すぐ、夜明けが来る。それを見る?夜明け?毎晩?...私は」

+0

'box'キーワードは、カスタム割り当てをカバーするものではありません(つまり、' Box'よりも* else *の割り当てをしています)?あるいは、それは配置 '< - 'で置き換えられますか? –

+1

'box'は推論を介して' Box'以外のもの(* Rc'、 'Arc's、*など*)をサポートします。関連するが、異なっている* placement *の現在の暫定的な構文です: 'box'は値を​​入れるための新しい場所を作成し、そこに置きます。' <-'は既存の*場所(例えば、ベクトルの終わりのように)。 –

+1

私はこの答えのすべての部分を楽しんだ - 私はまた何かを学んだ。 –