C/C++

  • C++ Notes 1 (Pages: 79)

      Software complexity, industrial strength software, software maintenance, software crisis, 5 attributes of a complex system, part-of hierarchy and is-a hierarchy, 'divide et impera', What is the right way to decompose a complex system - by algorithms or by objects?, Object model, object as a tangible entity, object oriented design and analysis, Abstraction, Encapsulation, Modularity, Hierarchy, Typing, Concurrency, Persistence, Applying the object model, C++ translator - cfront, composition, aggregation, separate compilation, variable declaration, C++ compilation using g++, .a and .so files, -lstdc++ switch in g++, lib.so and lib.a - standard C libraries, 'Hello World' in C++, Data types, "We believe that what the students learn depends on the models that they see. That is, if they are presented with examples that are well written, well documented and maintainable, then the programs that they write will exhibit these characteristics, regardless of the language used. To that end, this text contains a large number of examples that illustrate good programming style" -- C++, An introduction to Computing (Adams, Leestma, Nyhoff), "In the early 1970s, a new approach to programming called Object Oriented Programming (OOP) was becoming increasingly popular...", C++ standard library, "The most important thing to do when learning C++ is to focus on concepts and not get lost in the language technical details...", C, BCPL, Simula67, Algol68, Ada, CLU, ML; 'Hello World' program, Containers, C++ STL (Standard Template Library), String class, examples, sample programs, = operator, s.assign(), s.swap(), s1 += s2, s.append(), s.push_back(), s.insert(), s.max_size(), s.erase(), s.operator+, s.operator==, comparison operators, constructors of string class, replace functions in string class, operator < and="">>, getline() global function with examples, s.compare(), s.length(), s.size(), s.max_size(), s.resize(), s.capacity(), s.reserve(), s.operator[], s.at(), s.c_str() and s.data() float.h, limits.h, stddef.h, new.h, stdarg.h, stdlib.h, Identifiers, comments, sizeof various data types in C++; sample codes, floating constants, string literal, expressions, subscripting, standard conversions, basic concepts - 'what a name denotes', Declarations & definitions, samples codes, tentative definition, redefinition error, extern, multiple declarations; Derived types, alignment requirements, object - a region of storage, lvalue - an expression referring to an object or function, all lvalues are not modifiable, void - a syntactically fundamental type, Enumeration - a distinct integral type with names constants, examples (10 pages), 'all declarations of an entity must must agree on the type of the entity referred to'; 4 parts of a declaration: specifier (optional), a base type, declarator, initializer (optional); except for a function and namespace definitions, a declaration is terminated by semicolon; 'The implicit int rule was a source of subtle errors and confusion' in C; 'Classes and namespaces can be used to keep the scope small', 'Choosing good names is an art'; 'When the code and the comments disagree, both are probably wrong'.


  • C++ Notes 2 (Pages: 79)

      Scope of a name, initial values for an object in global namespace or local static object, automatic objects, Initial values of user defined types, implementation of pointers is intended to map directly to the addressing mechanisms of the machine on which the program runs, Smallest object that can be independently allocated and pointed-to using a built in pointer type is 'char'; 'zero' is special; 'const int NULL = 0', multidimensional arrays as array of arrays; string literal is statically allocated and so is safe to return one from a function; It is possible to have a null character in a string; taking a pointer to the element one beyond the array is guaranteed to work; Conversion between array name and pointer to the initial location; 'const' modifier must always be initialized; 'extern' keyword; Common uses of constants - array bound and as case labels; pointers and constants; 'const int *' and 'int * const' -- difference? Reference variables, value of reference cna be changes afer initialization; the initialization of a 'const T&' need not be an lvalue or even of type T. Pointer to void; functions using 'void*' pointers typically exists at the very low level of the system, where real hardware resources are manipulated; Structure - is an aggregate of arbitrary types; for reasons that reach into the prehistory of C, it is possible to declare a structure and a non-structure with the same name in the same scope; The name of the structure type can be used before the type is defined; _type_( ) macro; _type_(2147483648) --> unsigned long int; bool; exp_1 += exp_2 is equivalent to exp_1 = exp_1 + exp_2 except that x is evaluated only once; if(i, j) cout Error: expected primary expression before 'int'; The result of 'sizeof' is an unsigned integral type called 'size_t' defined in; The result of pointer subtraction is of a signed integral type called 'ptrdiff_t' defined in; int x = f(2) + f(3); --> undefined whether f() or g() is called first; int i = 1; v[i] = i++; --> undefined. Why? ; Precedence is also known as 'binding strength'; C operator precedence and associativity -- table; Free store -- 'new' and 'delete' operators; they are keywords as well; object allotted by the new are said to be on the 'free store'; also called as the 'heap objects' or 'allocated in dynamic memory'; delete[] operator -- applied only to the pointer to an array returned by the 'new'; The 'free store' operators 'new', 'new[]', 'delete', 'delete[]' are implemented as operator functions; The 'bad_alloc' class, set_new_handler() --> what 'new' should do upon memory exhaustion; g++ (GNU C++) and gcc (GNU compiler collection); Constructors, T(e), function style cast; Statement, sample codes, functions, functions with unused arguments, inline specifier for a function; static variables, argument passing, pass-by-value and pass-by-reference, examples, return value, examples, overloaded function names; constant expressions, implicit type conversions, integral promotion rules, integral conversion, floating point conversion, floating-integral conversion, usual arithmetic conversions; Function overloading examples; distinguishing between const T&, volatile T& and plain T& examples; functions that differ only in return type may not have the same name; typedef; enumerations; pointer* vs array[]; char, signed char and unsigned char; the function member of a derived class is not in the same scope as the function member of the same name in a base class; A locally derived function is not in the same scope as a function in the file scope; different versions of the overloaded member functions may be given different access rules; The best matching function is the intersection of sets of functions that best matches each argument; examples; The problem with the rules (in C & C++) for conversion of arithmetic types is that a value of an arithmetic type can be converted into any other arithmetic type; examples; For the purpose of argument matching, a function with n default arguments is considered to be n+1 functions with different number of arguments; examples; ambiguity in function overloading; Function overloading - the rules for the sequence of conversions; examples; some c++ novices get irritated by the ambiguity errors reported by the compiler, but more experienced programmers appreciate that these error messages are useful indicators of design errors. Code samples; 0 to pointer is a 'standard conversion' rule; inheritance hierarchy; preferring a standard conversion to a user defined conversion seems reasonable and is usually the right thing to do; Matching with 'ellipsis' (...) is worse than all others; sample codes; No preference is given to conversion by constructor or conversion by conversion function or vice versa; codes; pointer to a function and reference to a function; Macros; macro names cannot be overloaded and cannot handle recursion; codes; dangerous macros; multi-line macros; vectors; namespace; creating new namespaces; specifying the interfaces is a fundamental design activity; Same function name in different namespaces; examples; 'int main()' should always be in the global namespace; main() function cannot be overloaded; only declarations and definitions allows inside a namespace; nameless namespace is possible; nested namespaces; Namespace is a scope; sample codes; global 'using' directives are a tool for transition and are otherwise best avoided; unnamed namespaces; examples; namespace aliases; namespace composition; namespace and C; exmaples; namespaces are open; Exceptions -- 'No rule is general which admits not some exceptions' ;) examples; catch; C programmers can think of exception handling as a well behaved mechanism replacing setjmp and longjmp; Exceptions handlers can be nested; digress - by default all members of a class are private and all members of a structures are public; divide_by_zero class example; Separate compilation model in C++; linkage;


  • C++ Notes 3 (Pages: 64)

      Namespaces using multiple C files - sample codes; Other multifile sample codes, extern "C", linkage block for a group of declarations, macro __cplusplus, linkage block inside a namespace, a name with a C linkage can be declared in a namespace Calling C functions from C++, Linkage directive - may not appear inside a class or function definition, extern "C++" - linkage directive; linkage directives can be nested; linkage directive on a function definition, extern "Ada", extern "FORTRAN" - not supported by gcc, #ifdef __cplusplus ... #endif, Return value from the main function - the status indicator for main function; $ echo $? --> Exit status of the last command in UNIX/Linux; echo %ERRORLEVEL% --> status indicator for Windows, iostream library, istream and ostream, stream; the 4 I/O objects --> cin, cout, cerr, clog, Comments do not increase the size of the final executable program; Error handling; raise(3), signal(2), errno global variable, errno.h header, strerr() function, Shell built in variables: $0, $1, $#, $*, $_, $?, $$, perror, Backslash as the last charcater in a line causes the line to be treated as a single line; 63 Keywords in C++, alternative names for various operators --> and, bitand, compl, not_eq, or_eq, etc., Initialization, copy initialization, direct initialization; In C++ it is important to understand that initialization is not an assignment, Constructors - member functions of a class that defines how initialization works, Declarations and definitions, extern keyword; Reference - a compound type; a reference to a reference not allowed, Headers - the declarations in a header should logically belong together; it takes time to compile, 3 exceptions to the rule that headers should not contain definitions: classes, const objects, inline functions, "Value of a reference cannot change after initialization; it always refers to the object it was initialized to denote"; sample codes - extern const double, const double, inline functions, vector, sample codes, vector constructors; "although we can preallocate a given number of elements in a vector, it is usually more efficient to define an empty vector and add elements to it"; "a vector element must exist in order to subscript it; elements are not added when we assign through a subscript" -- a common mistake made by beginners; vector sample programs, v.size(), vector::size_type, v.pop_back(), v.swap(), v.resize(), v.clear(); Introduction to iterators; each container type defines its own iterator types; v.begin(), v.end(), sample codes; const_iterator; iterator arithmetic --> iterator + n, iterator - n, iter_1 - iter_2; reverse_iterator, const_reverse_iterator, rbegin(), rend(), vector insertion operation using iterators, erase() function; "It is legal to compute the address one past the end of an array or object; it is not legal to dereference a pointer that holds such an address", sample codes - const and pointers; "just as we almost always initialize the objects we define as variables, it is almost always a good idea to initialize dynamically allocated objects"; Dangling pointers; "variables can be defined only in the last case or default labels"; error--> jump to case label crosses initialization of j; sample codes; "if you throw an exception inside a catch, it will not be caught by the catch block", Macros used for debugging --> __LINE__, __FILE__, __TIME__, __DATE__, 'assert' macro does not function if 'NDEBUG' is defined when you compile your code; g++ -DNDEBUG asdf.cc, Reference to pointers -- sample codes; Passing array as a reference; "a reference value returned by a function is used to initialize a temporary object created at the point at which the call was made"; "when a function returns a reference type, the return value is not copied; instead the object itself is returned", constraints on specifying default arguments; sample codes; "Each member function (except static member functions) has an extra implicit parameter name 'this'; sample codes; constant member functions; "a const object or a pointer or a reference to a const object may be used to call only const member functions"; sample codes; constructor initializer list; synthesized default constructor; sample codes; "There are no restrictions on how often an access label may appear; each access label specifies an access level of the succeeding member functions"; When to use 'this' pointer? "...the most common case when we must use this is in functions that return a reference to the object on which they were invoked"; "Const objects can only call constant member functions"; you can overload functions based on const member functions, "named used in class scope do not always have to be class member names"; "You may call a global function inside a class"; "Constructor may not be declared as const"; "A constructor initializer is a feature that many reasonable experienced C++ programmers have not mastered..." ; sample codes; "The order in which the members of a class are initialized is th eorder in which the members are defined"; "If a class contains data members of built-in or compound types (like pointer, arrays, etc.) then the class should not rely on synthesized default constructor"; sample codes; "Constructor that can be called using a single argument defines an implicit conversion from the parameter type to the class type"; 'explicit' keyword; friend functions -- they are part of the interface of the class although they are non-member functions; "A member function of a class can return a reference to its private data members"; static class members; "a static member function do not have 'this' pointer; sample codes; "Class static members, like ordinary data members, cannot be initialized in the class body (except 'const static' data members)"; "If we do not explicitly define a 'copy constructor' or the 'assignment operator', the compiler will (usually) define them for us"; Direct and copy initialization in C++; sample codes; synthesized copy constructor; synthesized assignment operator; destructor; synthesized destructor; "If a class needs a destructor, it will also need an assignment operator and a copy constructor" -- Rule of Three; sample codes; Operator overloading, operators that cannot be overloaded --> ::, .*, ., ?: ; overloaded operators must have at least one operand of class type; Overloaded operator design - 5 pages; overloading output operator (<), overloading="" input="" operator,="" overloading'+'="" operator;="" overloading="" equality="" operator;="" overloading="" subscript="" operator;="" overloading="" unary="" plus="" and="" unary="" minus="" operators;="">


  • C++ Notes 4 (Pages: 80)

      Overloading the increment and decrement operators, pre/post increment operator as a member function/non-member function; operator overloading example 1 - complex class, operator overloading example 1 - ratio class, conversion of user define data types, conversion operator, inheritance, polymorphism, virtual keyword, dynamic binding, extensibility, static and dynamic type, 'compiler generates code to decide at runtime', reference to a base class, overloading the virtual mechanism, examples, virtual functions can have default arguments, private/public/protected inheritance, default inheritance protection levels, friendship and inheritance, inheritance and static members, conversion and inheritance, examples, conversion from base to derived, constructors and copy control, examples, infinitely invoking a constructor, invoking a constructor inside another constructor, examples, 'constructors are not inherited', virtual destructor, 'Rule of three' - if a class needs a destructor, then the class, almost surely will need a copy constructor and assignment operator, virtuals in constructors and destructors, name collisions and inheritance, 'understanding how function calls are resolved is crucial to understanding inheritance hierarchies in C++', examples, generic programming using templates, defining a template, passing a template function to another function, function templates, class templates, difference between the keywords 'typename' and 'class', writing type-independent code, instantiation, how to write member functions of a class template outside the class, implementing a class program using multiple files, creating header files and cpp files separately, ODR (one Definition Rule) - for class, template or inline functions, examples, const and non-constant references, reference to a pointer, reference to an array, sample inheritance program, inheritance and composition, name hiding, choosing composition vs inheritance, is-a and has-a relationshiop, subtyping, private inheritance, publicizing privately inherited members, protected keyword and protected inheritance, multiple inheritance, incremental development, polymorphism and virtual functions, late binding, class inheritance, how C++ implements late binding?, virtual keyword, why virtual functions?, abstract base class and pure virtual functions, pure virtual functions, inheritance and adding new virtual functions in derived class, object slicing, downcasting, virtual function calls and constructors and destructors, singly rooted hierarchy, 3 techniques for source code reuse - the C way, Smalltalk approach and the C++ approach.


  • C Notes 1 (Pages: 102)

      Brief history of C, Tokenizing the C source, sizeof for various data types, printf, data types, conversion, specifiers/characters, signed and unsigned, 2's complement representation, overflow, truncation, Creating 'preprocessed only' output in gcc, limits.h, constants, %e, %f, %g, %LE, %LF, %LG, double constants, multi-character character constants, '\0', The ubiquitous mistake: (i=3) and (i==3), The sizeof operator (and keyword), enumeration using enum, Floating Point number representation: The IEEE-754, UL suffix, % operator, division by zero, floating point exception, Conversion rules in C, Assignment rules in C: i+++j, i++++j, i+++++++j, static, const, auto, &, &&, |, ||, !, ~, ^; Why C doesn't have a logical XOR operator? Suffices l, L, ll, LL, lL, Ll; long long data type; hex representation, negative 0, negative octa number, char constants, floating point constants, string constants; Predicting the outputs with : && and || (order of evaluation is specified); +=, -+, *=, /=, shift operators (< and="">>); Comma operator (the lowest precedence operator), What is meant by 'size effect' in C?, The only operators where the order of evaluation is specified: &&, ||, , and ?:, Conditional expression --> ?:, The 'lvalue' and 'rvalue'; integer promotion; scanf, fscanf, conversion specification with scanf function; Floating point numbers and scanf; Pointer value and scanf; [...], [^...] in scanf; switch statement; while, for, continue, reak; getchar and putchar (macros), errno values, Error indications in C: , clearerr(), feof(), ferror(), perror(), strerr(),strerr_r(), fgetc(), fputc(), getw(), putw(), fputs(), puts(), fgets(), gets(), Palindrome, array subscripts should be integer types, integer promotion rules, Familiarising the headers: , Control character, NULL character, poison null, EOT, Bell, Echo, Line Feed, Carriage return etc. LCM algorithm, Program to print 'Hello World' without using the ';' character. Proof: 'A Composite number can be expressed as a product of primes in a unique way'. Proof: 'Every factors of a positive integer n should be less than or equal to (n/2)'.


  • C Notes 2 (Pages: 94)

      exit(), _exit(), Function prototypes, Why return type of getchar() is int, Function arguments, parameters, return expression, External variables and scope in functions, extern keyword, Multi-file compilation of a C program, -combine, -save-temps, -S, -c, Function prototypes inside functions, function prototype rules, static variables and function, automatic variables, Declaration rules, Initialization of array elements, Recursion, Factorial, Fibonacci, Macros in C, multiline macros, -E option in gcc, macros in ctype.h, quoted strings in macros, macros with arugments, # (stringizing operator), ## (token-pasting operator), Storage class specifiers: auto, extern, register, static, typedef, Rules to remember when defining macros, External declarations, definitions, scope, linkage, Array initializations, array and pointers, multi-dimensional arrays, pointer to pointers, array of pointers, pointer to arrays (30 pages), Command line arguments, Pointers to functions, fflush(), man --> section 1, 2, 3, curses library for graphics in C (20 pages), Structures in C, declaration, dot operator, unnamed structures & unions, nesting of structures, array of structures, valid operations on structure variables, passing/returning of structures to/from functions, pointers to structures, arrow operator, Ctrl + D, Enter, holes in structures (implementation dependent rules), alignment and size of structures, Byte alignment restrictions, byte padding rules, byte ordering, big and little endianness, data structure alignment, CISC & RISC processors, self-referential structures, incomplete types in structures, mutually recursive structures, bit-fields, -fpack-struct switch in gcc, data alignment of structures in gcc, bit-fields, 'almost everything about bit-fields is implementation dependent', Sample codes involving structures and bit-fields, short-circuit evaluation with && and ||, why expressoins inside brackets are not evaluated first, Some miscellaneous code snippets, main is not a keyword, string literal/constant, type qualifier, type specifier, FILE * pointer, struct _IO_FILE{ ... }


  • C Notes 3 (Pages: 97)

      File handling in C, modes of opening file: r, w, a, r+, w+, a+, binary files, fread, fwrite, dynamic memory allocation, calloc, malloc, free, realloc, The Russian peasant algorithm for number multiplication (using only multiplication and division by 2 and addition), function pointers declaration - different ways, typedef struct _IO_FILE FILE, struct _IO_FILE, fopen modes, file positioning functions, fseek, ftell, rewind, fgetpos, fsetpos, explicit type conversion, file program: using fopen, ftell, feof, getc; function pointer program, case keyword sample pgm, printf("10", 10), switch and label - sample pgm, undefined behavior, implementation, argument, parameter, value, program structure, program startup, sequence points, side effects, set of sequnce points available, free-standing and hosted execution environments, i++ passed to function, pointer with ++, * and -- operators: sample code, arrow operator code, dot operator, pointer to integer array of size 2; i = 2, 3 --> syntax error; i = (2, 3) --> valid stmt, structure sample code, array of function pointers, complicated declarations I, complicated declarations II, multidimensional arrays in C - array of arrays - how to predict the output; passing functions to other functions. extern & static pgm, ldd - print shared library dependencies; hexdump command, od command, readelf command, echo command, Where the same file can be opened simultaneously is implementation defined; deleting a file using remove(), rename() function, tmpfile() function, qsort() function, bsearch() function, Program library - shared, static and dynamically loaded (DL) libraries; ar command (gnu development tools) to create archive, Example for creating static library, calling an external program in C (linux), system() function, fork() command, segments in elf: .text, .bss, .data, .symtab, .interp; exec() system call, copy-on-write (cow), vfork(), _exit() and exit(), fork() sample code, wait(), waitpid(), waitid(), sample code, Predicting output for x[3][2][5]; Processes and signals, process structure, ps command, init process, /proc directory, Process table, ps command, init - the mother of them all; getty, runlevel, changing runlevels, skipping init, getty (get teletype) in unix, process scheduling, ps command, nice value, nice command (niceness should not be confused with scheduling priority), examples, Starting a new process with system(), sh command, replacing a process image, exec family of function calls, execl, execlp, execle, execv, execvp, sample code using exec functions, environment variables, getenv(), clearenv(), setenv(), unsetenv(), duplicating a process image, pstree command, "Does forking creates duplicate copies of the code (.text) segment for the child and the parent?", fork-exec technique, overlaying, SIGCHLD, filters in unix, chain loading, pseudo terminal, tty command, grantpt(), unlockpt(), copy-on-write (cow) technique, orphan process, SIGHUP, adopted by init, daemon process, Maxwell's daemon (the though experiment), Method for a process to become a daemon, list of service daemons for UNIX like systems, windows equivalent, TSR (Terminate and Stay Resident) programs, Services in Windows, daemon etymology, File attributes in linux, ls command, struct stat, #include, stat, fstat, lstat; mode_t, st_mode, struct stat, sample code using struct stat, file owner in linux, chown() function call - change owner; fchown() call, mode-bits for permission, sample code to print the file details, sticky bits


  • C Notes 4 (Pages: 98)

      Assigning file permissions, umask command, read_umask(), get_umask(), chmod(), fchmod(), creat(), write(), 'time' command in linux; real, user and system time; CamelCase; snake case; lazy program theory; alto keyboard theory, hungarian notation; unspecified and undefined behaviour; digress: Visicalc; @ symbol; Raymond Tomilson; perfect number; digress: proof for '2^(p-1) * (2^p - 1)' is an even perfect number whenever 2^(p-1) is prime. (2^p - 1) is prime only when p is prime; mersenne primes; strong law of small numbers, Every even perfect number of the form '2^(p-1) * (2^p - 1)' is represented in binary as P ones followed by (p-1) zeroes. Mersenne number; 2^p - 1, GIMS (Great Internet Mersenne Prime Search), George Woltman, Prime95, MPrime; Interrupts & Signals, raise(), kill(), signal.h, signal(), pthread_kill, digress: EFF(Electronic Frontier Foundation), Larry Wall, Perl, 'Benevolent Dictator for Life'; Mark Shuttelworth; Signal handling, abort(), alarm(), segmenation fault: bus error, non_existent address, unaligned access, segmentation/page fault, __asm__, bus error example code, pipeline (in Linux/UNIX), '|', background tasks using '&', pipe(), write(), read(), The C standard library, 24 header files, assert.h, complex.h, ctype.h, errno.h, fenv.h (floating-point environment), float.h, inttypes.h, iso646.h (iso646 variant character sets), limits.h, locale.h, math.h, setjmp.h (non-local exits), stdarg.h, stdbool.h, stdint.h, stddef.h, stdio.h, stdlib.h, string.h, tgmath.h, time.h, wchar.h, wctype.h, glibc, libc.so, __STDC_HOSTED__, hosted and free-standing libraries, buffer-overflow vulnerabilities in C library, stdbool.h, digress: ad infinitum; stdint.h, int8_t, int16_t, int32_t, uint8_t, uint16_t, uint32_t, minimum width integer types, fastest integer types with minimum widths specified, integer types capable of holding object pointers, greatest width integer types, memory segmentation, digress: Trusted Platform Module, Crypto-processor, scare quotes around 'trusted computing', SSDs & HDDs comparison, single level cell (SLC) and multi-level cell (MLC) - comparison, read \amp write cycles, 4KB pages, TRIM command, gets slower the more you fill it up, 'block' - the smallest structure you can erase in a NAND flash device, logical block addressing, overwriting files - in HDDs and SSDs, SSD controller, Why SSDs gets slower the more you use them? TRIM command, awk tutorial - language for processing files of text, POSIX awk, GNU Awk, sed, awk is turing complete, 'a line is scanned for each pattern in the program and for each pattern that matches, the associated action is taken', awk { }, BEGIN and END clause, NR - number of records, -F option, initializing awk variables on the command line, special characters, digress: chiclet keyboard, awk - continued, variables with specific functions - ARGC, FILENAME, NF, NR, FS, OFMT, OFS, ORS, RS; 'in' operator, SUBSEP variable, delete statement, relational expression in awk do not return a value, examples, built-in functions for Gawk, examples.


  • C++11 Part 1 (Pages: 198)

      Introduction to C++11, auto keyword, const, constexpr and symbolic constants, delegating constructors, converting constructors, explicit and delete, enum classes, move constructors and move assignment, lvalue, rvalue, xvalue, glvalue, prvalue, lvalues and rvalues in C++11, nullptr, for-each loop in C++11, rvalue references, smart pointers, auto_ptr and why to avoid it, unique_ptr, make_unique, shared_ptr, make_shared, std::move(), circular dependency issues with shared_ptr, weak_ptr.


  • C++11 Part 2 (Pages: 95)

      Override and final specifiers, covariant return type, virtual destructor, virtual assignment, assert and static_assert, class initialization using initializer_list, uniform variable initialization in c++11, multithreading in c++11, join(), atomic, what happens when you don't call join() for std::thread?, get_id(), starting thread using lambda, std::mutex, lock() and unlock(), lock_guard template class, recursive_lock, timed locking using try_lock_for() and try_lock_until(), call_once, once_flag, condition_variable, atomic types.


link="#000000" vlink="#000000" alink="#000000"