Contents
Class
- 可以直接使用
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 的規則?
Operator
-
::
與 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
- 繼承 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。
Smart Pointer
-
unique_ptr
使用 get 的行為? 使用 Sigleton 時,要回傳 pointer、smart pointer、reference? (1.2.2 Example 1 - FileRepository Class) -
make_shared
與繼承的關係? (1.6.2 Example)- 繼承的 class 是該資源的共同擁有者,直到所有 class 都釋放該資源,才會被釋放
Lambda
- lambda 中 capture, parameter 的差異 (1.2.3 Example 2 - OpenGL GLFW Keyboard Manager)
- capture 傳入是該 scope 的變數,有點像 global variable,而 parameter 則是像 function parameter
參考資料
- 圖說設計模式
- C++ Design Patterns
- CPP / C++ Notes - Design Patterns
- Replacing CRTP Static Polymorphism With Concepts
- Virtuality - H. Sutter
Комментарии