From 5ff3ab91adb6c4798e7337efeed9a62dfd073f8c Mon Sep 17 00:00:00 2001 From: huihut Date: Wed, 4 Apr 2018 01:14:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=99=9A=E6=9E=90=E6=9E=84?= =?UTF-8?q?=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 71 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 36 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index 5ad4883..8aa0b53 100644 --- a/README.md +++ b/README.md @@ -151,41 +151,42 @@ inline int functionName(int first, int secend,...) {/****/}; ```cpp #include -using namespace std; -class Base -{ -public: - inline virtual void who() - { - cout << "I am Base\n"; - } - virtual ~Base(); -}; -class Derived: public Base -{ -public: - inline void who() // 不写inline时隐式内联 - { - cout << "I am Derived\n"; - } -}; - -int main() -{ - // 此处的虚函数who(),是通过类(Base)的具体对象(b)来调用的,编译期间就能确定了,所以它可以是内联的,但最终是否内联取决于编译器。 - Base b; - b.who(); - - // 此处的虚函数是通过指针调用的,需要在运行时期间才能确定,所以不能为内联。 - Base *ptr = new Derived(); - ptr->who(); +using namespace std; +class Base +{ +public: + inline virtual void who() + { + cout << "I am Base\n"; + } + virtual ~Base() {} +}; +class Derived : public Base +{ +public: + inline void who() // 不写inline时隐式内联 + { + cout << "I am Derived\n"; + } +}; - // 因为Base有虚析构函数,所以调用子类析构函数后,也调用父类析构函数,防止内存泄漏。 - delete ptr; - ptr = nullptr; - - return 0; -} +int main() +{ + // 此处的虚函数who(),是通过类(Base)的具体对象(b)来调用的,编译期间就能确定了,所以它可以是内联的,但最终是否内联取决于编译器。 + Base b; + b.who(); + + // 此处的虚函数是通过指针调用的,呈现多态性,需要在运行时期间才能确定,所以不能为内联。 + Base *ptr = new Derived(); + ptr->who(); + + // 因为Base有虚析构函数(virtual ~Base() {}),所以调用基类(Base)析构函数,也调用派生类(Derived)析构函数,防止内存泄漏。 + delete ptr; + ptr = nullptr; + + system("pause"); + return 0; +} ``` ### assert() @@ -532,7 +533,7 @@ int main() { Shape * shape1 = new Circle(4.0); shape1->calcArea(); - delete shape1; //因为是虚析构函数,所以调用子类析构函数后,也调用父类析构函数。 + delete shape1; //因为Shape有虚析构函数,所以delete释放内存时,调用基类析构函数,也调用子类析构函数。 shape1 = NULL; return 0; }