deep_c++:对象的数据成员

本文详细探讨了C++中虚拟继承与虚基类的实现方式,包括Vptr与Vbptr的区别,以及它们如何通过虚函数表与虚基类表进行寻址。文章深入剖析了存取方式和复制控制的要求对两者的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class X{
    virtual void vf(){};
};
class X2:virtual public X
{
  virtual void vf(){};
};
class X3:virtual public  X2
{
     virtual void vf(){};
}

X3将包含有一个Vptr,两个Vbptr。确切的说这两个Vbptr一个属于X3,一个属于X3的子对象X2,X3通过其Vbptr找到子对象X2,而X2通过其Vbptr找到X。

其中差别在于vptr通过一个虚函数表可以确切地知道要调用的函数,而Vbptr通过虚基类表只能够知道其虚基类子对象的偏移量。这两条规则是由虚函数与虚拟继承的实现方式,以及受它们的存取方式和复制控制的要求决定的。

object_detect_result_list old_results; object_v8detect_result_list old_v8results; __android_log_print(ANDROID_LOG_DEBUG, "yolov8rknn.cpp", "191~~~~~~~~~~~~~"); double satr_time2 = ncnn::get_current_time(); inference_yolov8_pose_model(&rknn_app_ctx, &src_image, &old_results); inference_yolov8_model(&rknnv8_app_ctx, &src_image, &old_v8results); double end_time2 = ncnn::get_current_time(); __android_log_print(ANDROID_LOG_DEBUG, "yolov8rknn.cpp", "推理时间·`` time: %.3f ms", (end_time2 - satr_time2)); __android_log_print(ANDROID_LOG_DEBUG, "yolov8rknn.cpp", "193~~~~~~~~~~~"); __android_log_print(ANDROID_LOG_DEBUG, "yolov8rknn.cpp", "ddddddddd %d", old_results.count); g_pose_result_queue.push(old_results);这里是我代码push的地方,能看出为什么出现(void std::__ndk1::allocator<object_detect_result_list>::construct<object_detect_result_list, object_detect_result_list const&>(object_detect_result_list*, object_detect_result_list const&)+72) (BuildId: 287c08e27bae126289(void std::__ndk1::allocator_traits<std::__ndk1::allocator<object_detect_result_list> >::__construct<object_detect_result_list, object_detect_result_list const&>(std::__ndk1::integral_constant<bool, true>,std::__ndk1::all(void std::__ndk1::allocator_traits<std::__ndk1::allocator<object_detect_result_list> >::construct<object_detect_result_list, object_detect_result_list const&>(std::__ndk1::allocator<object_detect_result_list>&, object_det(std::__ndk1::deque<object_detect_result_list,std::__ndk1::allocator<object_detect_result_list> >::push_back(object_detect_result_list const&)+148) (BuildId:287c08e27bae1262894424260a381fc17883306f)(BuildId: 287c08e27bae1262894424260a381fc17883306f) (open_media+1216) (BuildId: 287c08e27bae1262894424260a381fc17883306f)吗
03-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值