Part-F of C++ interview questions with new answers:

51. What is the std::move function, and how does it enable move semantics in C++?

  • std::move is a utility function that converts an lvalue into an rvalue reference, allowing you to move resources from one object to another. It enables move semantics, which allows efficient transfer of resources (like memory ownership) instead of making expensive deep copies.

52. How do you handle exceptions in C++ when dealing with resources like memory allocation or file handling?

  • When dealing with resources like memory allocation or file handling, it’s essential to use RAII (Resource Acquisition Is Initialization) along with exception handling. RAII ensures that resources are automatically released when they go out of scope, and exception handling helps manage unexpected errors that might occur during resource acquisition or usage.

53. What are the differences between std::mutex, std::recursive_mutex, and std::shared_mutex in C++ multithreading?

  • std::mutex: A basic mutex that provides exclusive ownership. If a thread locks a mutex, other threads will be blocked until the mutex is unlocked.
  • std::recursive_mutex: A mutex that allows the same thread to lock it multiple times without getting blocked. The thread must unlock the mutex an equal number of times it was locked.
  • std::shared_mutex: A mutex that allows for multiple readers or a single writer. Multiple threads can read data concurrently, but writing is exclusive.

54. Explain the Rule of Five in C++.

  • The Rule of Five states that if a class needs to have a custom implementation of one of the following functions, it likely needs to have custom implementations of all five:
    • Destructor: To properly release resources.
    • Copy Constructor: To create a deep copy of the object when copied.
    • Copy Assignment Operator: To perform proper assignment when copying objects.
    • Move Constructor: To efficiently move resources from one object to another.
    • Move Assignment Operator: To efficiently move resources during assignment.

55. How do you avoid memory leaks when working with raw pointers in C++?

  • To avoid memory leaks with raw pointers, always ensure to deallocate dynamically allocated memory with delete (for single objects) or delete[] (for arrays) after it is no longer needed. Alternatively, prefer using smart pointers (std::unique_ptr or std::shared_ptr) to manage memory automatically and safely.

56. Explain the C++ const correctness principle and its importance in programming.

  • const correctness is about ensuring that objects are not modified when they shouldn’t be. Using const properly helps in writing safer code by preventing unintended changes to objects and promoting code clarity. It also enables the compiler to perform certain optimizations.

57. What are C++ templates, and how do they support generic programming?

  • C++ templates are a powerful feature that allows you to write generic code that works with different data types. Templates are like blueprints for creating functions or classes with generic types. The compiler generates concrete versions of templates for specific data types at compile time, enabling generic programming.

58. What is the C++ Standard Library, and what are its components?

  • The C++ Standard Library is a collection of pre-defined classes and functions that provide essential functionality and algorithms. It includes containers (like vectors, lists, maps), algorithms (like sorting, searching), I/O streams, and other utilities to support modern C++ programming.

59. How do you implement a custom exception in C++?

  • To implement a custom exception in C++, you need to define a new class derived from std::exception or any of its derived classes. You can then override the what() member function to provide a custom error message that explains the cause of the exception.

60. Explain the usage of const_iterator in C++ STL containers.

  • A const_iterator is an iterator that points to a constant element in a C++ STL container. It allows you to traverse the container and access its elements but prevents you from modifying the elements through the iterator. This is useful when you want to iterate over a container without altering its contents.

Review and understand these questions along with their answers to strengthen your C++ knowledge for interviews. Keep practicing coding problems and stay confident in your abilities. Good luck!