不安全代碼
目前這塊的文檔還沒有出來,看源代碼應該是;
-
標注函數(shù)為不安全函數(shù)
所有手動控制內存的函數(shù)要標注為unsafe_fn
[unsafe_fn] //標注為不安全函數(shù)
pub fn (a array) free() {
//if a.is_slice {
//return
//}
C.free(a.data)
}
-
unsafe代碼塊中才能調用不安全函數(shù)
unsafe是新的關鍵字
fn my_fn() {
unsafe {
//在這里才能調用不安全函數(shù)
}
//在unsafe代碼塊之外調用,編譯器會警告
}
在不安全代碼塊中進行指針運算和多級指針,編譯器啥都不管汤善,自己掌控
fn test_pointer_arithmetic() {
arr := [1,2,3,4]
unsafe {
mut parr := *int(arr.data)
parr++
assert 2 == *parr
parr++
assert 3 == *parr
assert *(parr + 1) == 4
}
}
fn test_multi_level_pointer_dereferencing() {
n := 100
pn := &n
ppn := &pn
unsafe {
mut pppn := &ppn
***pppn = 300
pppa := ***int(pppn)
assert 300 == ***pppa
}
assert n == 300 // updated by the unsafe pointer manipulation
}