- 主题:&[T]和&T的具体区别?
对于A,B:
struct A <'a> {
content : &'a [T]
}
struct B <'a> {
content : &'a T
}
具体有什么不同,A有什么优势、有何代价,什么场景下必须使用?
--
FROM 221.218.142.*
这是我去年遇到的一个做法,当时没细探究,今天突然想起。
问题是这样的,结构体A需要包含一个内容content,类型是复合的T,例如T为Vec<HashSet<T1>>。
结构体A需要被实例化多次,例如a1 a2 an等。每个实例至少需要多线程安全,至少会被线程传递。
我没记清实例还需要满足什么trait。但是记得开始把结构体从A写成B的写法&T不满足某种trait,导致错误。写成A的切片以后,虽然切片里只包含1个T,但是却成功绕过了接口类型检查。
所以想探究下,从&T改到&[T]的写法,到底绕过了什么检查?付出了什么代价?
【 在 RunningOn 的大作中提到: 】
: 啥意思?
: 一个是数组切片,一个是引用。
: 对应到C++,一个是指向对象数组的指针,一个是指向对象的指针。只是C++里指向对象的指针也可以当成对象数组指针用[下标]来访问,但rust不行。
: ...................
--
FROM 221.218.142.*
好的,回头我再找下那个源码,对着具体问题再请教
【 在 RunningOn 的大作中提到: 】
: 这个可能不是你想的原因。
: 线程传递需要Send这个trait,但这个trait是不能被显式impl的,大多数类型都满足Send。
: 要找问题,还是要看你的多线程代码是怎么写的,rust自己的写法是要求引用的lifetime是'static,你这个看着不像是'static。新的1.63版本或使用crossbeam写多线程才不需要是'static.
: ...................
--
FROM 221.218.142.*