let vec1 = vec![1, 2, 3, 4];
let vec2 = vec![Box::new(1), Box::new(2), Box::new(3), Box::new(4)];
他们之间有什么区别? 我已ç»åœ¨å †ä¸Šåˆ†é…了vec1。那么vec1çš„æ‰€æœ‰å…ƒç´ éƒ½ä¸åœ¨å †ä¸Šå—?为什么我需è¦åƒåœ¨vec2ä¸é‚£æ ·åœ¨å †ä¸Šå•ç‹¬åˆ†é…它们?
ç”案 0 :(得分:29)
æˆ‘ä¼šç”»ä¸€å¼ å›¾ã€‚ç¬¬ä¸€ä¸ªå€¼æ˜¯æŒ‡å‘å †ä¸Šè¿žç»æ•°å—数组的指针。
(stack) (heap) ┌──────┠┌───┠│ vec1 │──→│ 1 │ └──────┘ ├───┤ │ 2 │ ├───┤ │ 3 │ ├───┤ │ 4 │ └───┘
ç¬¬äºŒä¸ªç‰ˆæœ¬å¢žåŠ äº†é¢å¤–çš„é—´æŽ¥æ€§ã€‚å…ƒç´ ä»ç„¶åœ¨å †ä¸Šï¼Œä½†çŽ°åœ¨å®ƒä»¬åœ¨å †ä¸Šçš„其他地方。
(stack) (heap) ┌───┠┌──────┠┌───┠┌─→│ 1 │ │ vec2 │──→│ │─┘ └───┘ └──────┘ ├───┤ ┌───┠│ │───→│ 2 │ ├───┤ └───┘ │ │─┠┌───┠├───┤ └─→│ 3 │ │ │─┠└───┘ └───┘ │ ┌───┠└─→│ 4 │ └───┘
由于所有æƒåœ¨Rustä¸çš„è¿è¡Œæ–¹å¼ï¼Œæ‚¨ä¸ä¼šé‡åˆ°ä»»ä½•è¯ä¹‰å·®å¼‚。é¢å¤–çš„é—´æŽ¥æ€§ä¼šç»™ä½ å¸¦æ¥æ›´ç³Ÿçš„内å˜ä½¿ç”¨å’Œç¼“å˜å±€éƒ¨æ€§ã€‚
ç”案 1 :(得分:4)
vec![1, 2, 3, 4]
是i32
sçš„å‘é‡ã€‚
vec![Box::new(1), Box::new(2), Box::new(3), Box::new(4)]
是i32
s拥有指针的å‘é‡ã€‚ Rust拥有的指针类似于C ++çš„unique_ptr。