Contents

C++ Questions

整理看 C++ Code 遇到的問題

  • 可以直接使用 UserBuilder() 而沒有建立 instance? (Builder (Joshua Blosh))
    • 直接使用 constructor,回傳 instance 直接使用 member function
  • root class 假設其他 Object 有 move constructor 而 定義了 operator Object() {return std::move(ObjectInstance)},這樣設計合理嗎? (Design Patterns in Modern Cpp p43)
  • base class 擁有 derived class 的 reference,而繼承時 constructor 必須賦值給 base class,這樣設計合理嗎? (Design Patterns in Modern Cpp p43)
  • parameter is const lvalue reference 為甚麼可以接收 rvalue ? (composite_builder example)
    • rvalue 可以轉型成 const lvalue reference
  • static member function 與 friend function 個別使用時機?
  • Base *ptr = new Derived; ptr 可以呼叫 Derived 自身定義的 function 嗎?
    • 不能,Name lookup 在 compile time (C++ Primer chapter 15.6)
  • 為何 virtual dtor 可以運作?
  • 自動產生 copy operations、move operations、dtor 的規則?
  • :: 與 lambda 的用法? (1.2.3 Example 2 - OpenGL GLFW Keyboard Manager)
    • :: 是 resolution operator,前面沒加東西代表是 global namespace
  • []{}() 是甚麼? (1.6.2 Example)
  • () operator ? (Design Patterns in Modern Cpp p43)
    • conversion function
  • new 與 C 的 malloc() 差別?
  • 繼承 template class (1.2.4 Example 3 - Generic Singleton)
    • CRTP 的技巧
  • template <class T> ?
    • template <typename T> 等價
  • Source code organization (C++ Templates)
    • Inclusino Model 是將 template 的 definition 寫在標頭檔裡,而 Explicit Instatiation Model 則是寫在 .cpp。因此在編譯時,前者會直接解析 template 並建立 instance;而後者只會建立 external reference 直到連結時期找到對應的 instance,所以在後者的 .cpp 中要額外顯式的指定 template type,在編譯時期建立對應的 instance。
  • unique_ptr 使用 get 的行為? 使用 Sigleton 時,要回傳 pointer、smart pointer、reference? (1.2.2 Example 1 - FileRepository Class)
  • make_shared 與繼承的關係? (1.6.2 Example)
    • 繼承的 class 是該資源的共同擁有者,直到所有 class 都釋放該資源,才會被釋放
  • lambda 中 capture, parameter 的差異 (1.2.3 Example 2 - OpenGL GLFW Keyboard Manager)
    • capture 傳入是該 scope 的變數,有點像 global variable,而 parameter 則是像 function parameter





Комментарии