我明白了,如此写等价于直接delete B类型指针,当然会调用A的析构函数
CS-liujf
@CS-liujf
-
析构函数为何会调用 -
析构函数为何会调用class A { public: ~A() { std::cout << "A" << std::endl; } }; class B : public A { public: ~B() { std::cout << "B" << std::endl; } }; template <typename T> class MySharedV2 { public: template <typename T2> MySharedV2(T2 *p) { data_ = p; deleter_ = [p](){ delete p;}; } ~MySharedV2() { deleter_(); } T* operator->() { return data_; } private: std::function<void()> deleter_; T* data_ = nullptr; }; int main(){ MySharedV2<A> ptr(new B()); }
对于上述代码,
B
的析构函数被调用我能理解,因为MySharedV2
的析构函数会调用B
的析构函数,但A
的析构函数为什么也会被调用,是什么地方调用的它? -
关于c++ chrono库中类型方面的问题对于这段代码
#include <chrono> int main(int argc, char *argv[]) { std::chrono::microseconds ms = std::chrono::duration_cast<std::chrono::milliseconds>( std::chrono::system_clock::now().time_since_epoch()); return 0; }
我认为存在错误,因为我觉得
milliseconds
类型和microseconds
类型不匹配。但现实却是,无论clangd还是使用gcc进行编译都不会报错。这是为什么?