From 5deeff26bd5309700aaf43ede0ed23217a0a5fd8 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Tue, 25 Jul 2023 21:18:43 +0200 Subject: Tour3Log: Chapter 5 and 6 --- tour3_log/tour3_log.tex | 78 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) (limited to 'tour3_log/tour3_log.tex') diff --git a/tour3_log/tour3_log.tex b/tour3_log/tour3_log.tex index 5746a81..b512b44 100644 --- a/tour3_log/tour3_log.tex +++ b/tour3_log/tour3_log.tex @@ -40,4 +40,82 @@ I guess this is exactly what advice 13 is about? \section*{Chapter 4: Error Handling} Well covered topic. No comments or questions +\section*{Chapter 5: Classes} +It is curious how, when overloading the virtual destructor, both the +overloaded and base-class destructors are called - in contrast to +other member functions where only the overloaded member function is +called. +It would be instructive to also see how the base-class member +functions can be called from the overloaded one, whenever needed. + +\bigskip + +At the bottom of page 68 (in section 5.5.3) there is an example of usage of +the \texttt{unique\_ptr} to avoid memory leaks. Is this intentionally +not using \texttt{make\_unique} to construct the object? + +\bigskip + +How does performance compare between classes inheriting an abstract +interface vs. classes inheriting a ``regular'' virtual class? +Is there for example an optimization shortcut when inheriting an +abstract interface that makes it possible to not carry around on +a \texttt{vtbl}? + +\section*{Chapter 6: Essential Operations} +Is it considered good or bad practice to simply call the copy +assignment operator on a default constructed object inside the copy +constructor? +(or vice versa) instead of ``duplicating'' the code itself: +\begin{verbatim} +class O +{ +public: + O() = default; + O(const O& o) : O() + { + *this = o; // call assignment operator + } + + O& operator=(const O& o) + { + // .. do member assignments + return *this; + } +}; +\end{verbatim} +I imagine that most implementations of copy constructor and copy +assignment would be very similar. +Would something similar make sense for move? +And keeping with that thought, wouldn't it be possible to only provide +one of them and have the compiler generate the other? + +\bigskip + +When is returned \texttt{*this} in the copy operator actually used? +Is this for chained assignments such as: \texttt{Obj o = a = b;} ? + +\bigskip + +When working on older C++ code (pre-C++11, from before introduction of +move semantics) what would be considered a good strategy for ``upgrading'' +to a modern version of C++? Would simply altering of the compiler +arguments potentially leave classes without move constructors leading +to corrupt pointer members as described in section 6.2.1? +Or perhaps the compiler knows that it can just never be moved? + +\bigskip + +This section talks a bit about garbage collectors and it reminded me +that in one of the first lectures you mentioned an open source garbage +collector that could be plugged into C++, but you couldn't recall the +name of it. I would be very interesting to know more about this topic +- especially for use in debugging or testing. + +\bigskip + +What does the comma operator usually do? Would it be possible to have +\texttt{a} and \texttt{b} interact through the comma operator when +supplied as parameters to a function \texttt{func(a,b)}? + \end{document} -- cgit v1.2.3