所以如果delete的指针和其指向的真实类型不一样的时候,编译器只会调用指针类型的析构函数,这也就为什么基类的析构函数需要声明称虚函数才能够保证delete基类指针的时候子类析构函数能够被正确的调用。 operator delete是都会被调用到的,所以指针指向的那块内存是能够“正常的”被释放掉用。 std::shared_ptr<void>的...
get_del 上述代码中,通过使用type erasure技术,用_Sp_counted_base的三个子类分别处理了std::shared_ptr的三种构造情况: _Sp_counted_ptr: 用于直接用裸指针对std::shared_ptr(_Yp* __p)进行初始化的情况,此时使用默认的deletor和allocator。 _Sp_counted_deleter: 用于同时指定裸指针和deletor/allocator的情况:...
publicBaseB{};intmain(){std::shared_ptr<Derived>pd(newDerived);std::shared_ptr<BaseB>pb(pd)...
...特殊类设计 5.1 请设计一个类,不能被拷贝 拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,只需让该类不能调用拷贝构造函数以及赋值运算符重载即可 5.1.1 C++...,派生类中调不到基类的构造函数。 16410 C++|智能指针模板类...
移动构造函数和移动赋值操作符,仅仅在没有用户自定义的拷贝操作,移动操作和析构操作的时候才会生成。...ptr5(std::move(cl)); // ok unique转unique } 小结:(1)我们需要了解子类向基类的隐式转换,通过将移动构造函数变为带模板的移动构造函数 2.9K10 C++核心准...