在chromium源码中,blink有大量的 Member模板
在chromium源码中,blink有
Member<AgentGroupScheduler> agent_group_scheduler_; Member<PageAnimator> animator_; const Member<AutoscrollController> autoscroll_controller_; Member<ChromeClient> chrome_client_; const Member<DragCaret> drag_caret_; const Member<DragController> drag_controller_; const Member<FocusController> focus_controller_; const Member<ContextMenuController> context_menu_controller_; const Member<PageScaleConstraintsSet> page_scale_constraints_set_;
大量的 Member模板,比如 third_party/blink/renderer/core/page/page.h中
这个Member与v8引擎有关,说明它的模板参数是个可垃圾回收对象,强指针。
比如举个例子 Member<PageAnimator> animator_;:
class CORE_EXPORT PageAnimator final : public GarbageCollected<PageAnimator> { public: explicit PageAnimator(Page&);
在 third_party/blink/renderer/platform/heap/garbage_collected.h
而它的Member在v8/include/cppgc/member.h
/** * Members are used in classes to contain strong pointers to other garbage * collected objects. All Member fields of a class must be traced in the class' * trace method. */ template <typename T> using Member = internal::BasicMember< T, internal::StrongMemberTag, internal::DijkstraWriteBarrierPolicy, internal::DefaultMemberCheckingPolicy, internal::DefaultMemberStorage>; /** * WeakMember is similar to Member in that it is used to point to other garbage * collected objects. However instead of creating a strong pointer to the * object, the WeakMember creates a weak pointer, which does not keep the * pointee alive. Hence if all pointers to to a heap allocated object are weak * the object will be garbage collected. At the time of GC the weak pointers * will automatically be set to null. */ template <typename T> using WeakMember = internal::BasicMember< T, internal::WeakMemberTag, internal::DijkstraWriteBarrierPolicy, internal::DefaultMemberCheckingPolicy, internal::DefaultMemberStorage>; /** * UntracedMember is a pointer to an on-heap object that is not traced for some * reason. Do not use this unless you know what you are doing. Keeping raw * pointers to on-heap objects is prohibited unless used from stack. Pointee * must be kept alive through other means. */ template <typename T> using UntracedMember = internal::BasicMember< T, internal::UntracedMemberTag, internal::NoWriteBarrierPolicy, internal::DefaultMemberCheckingPolicy, internal::DefaultMemberStorage>;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2018-05-17 goroutine背后的系统知识
2017-05-17 git 笔记
2014-05-17 癌症高发区