list of 25 essential C++ interview questions and answers for experienced developers, covering advanced concepts, memory management, OOP, STL, and modern C++ features:
1. What is the difference between new
and malloc()
in C++?
Answer:
new
:- Calls the constructor.
- Returns the exact type (no typecasting needed).
- Can be overridden (operator overloading).
malloc()
:- Allocates raw memory (no constructor calls).
- Returns
void*
(requires typecasting). - Part of C, not type-safe.
2. Explain the RAII (Resource Acquisition Is Initialization) idiom.
Answer:
RAII ties resource management (e.g., memory, files) to object lifetime. Resources are acquired in the constructor and released in the destructor. Example:
class FileHandle {
FILE* file;
public:
FileHandle(const char* path) { file = fopen(path, "r"); }
~FileHandle() { if (file) fclose(file); }
};
3. What is a virtual destructor? When is it needed?
Answer:
A virtual destructor ensures proper cleanup of derived class objects when deleted via a base class pointer. Needed when:
Base* obj = new Derived();
delete obj; // Calls ~Derived() only if ~Base() is virtual.
4. How does std::move
work? What is move semantics?
Answer:
std::move
casts an object to an rvalue reference, enabling move semantics.- Move semantics transfer ownership of resources (e.g., dynamic memory) instead of copying. Example:
std::string s1 = "Hello";
std::string s2 = std::move(s1); // s1 is now empty.
5. What is the Rule of Five?
Answer:
If a class defines any of these, it should define all five to manage resources correctly:
- Destructor
- Copy constructor
- Copy assignment operator
- Move constructor
- Move assignment operator
6. Explain the difference between override
and final
keywords.
Answer:
override
: Ensures a function overrides a virtual base class method (compile-time check).final
: Prevents further overriding (for methods) or inheritance (for classes).
7. What is a std::unique_ptr
? How does it differ from std::shared_ptr
?
Answer:
unique_ptr
: Exclusive ownership (non-copyable, movable).shared_ptr
: Shared ownership (reference-counted).
8. How do you prevent object copying in C++?
Answer:
Delete the copy constructor and copy assignment operator:
class NonCopyable {
NonCopyable(const NonCopyable&) = delete;
NonCopyable& operator=(const NonCopyable&) = delete;
};
9. What is a lambda expression? Give an example.
Answer:
Anonymous function objects. Example:
auto lambda = [](int x) { return x * x; };
std::cout << lambda(5); // Output: 25
10. Explain SFINAE (Substitution Failure Is Not An Error).
Answer:
A template metaprogramming technique where invalid substitutions are ignored rather than causing errors. Used in std::enable_if
.
11. What is constexpr
? How is it different from const
?
Answer:
constexpr
: Evaluated at compile-time (for functions/variables).const
: Runtime constant (immutable after initialization).
12. How does std::thread
work? What is a race condition?
Answer:
std::thread
launches a new thread. Example:
std::thread t([](){ std::cout << "Hello from thread!"; });
t.join();
- Race condition: Unsynchronized access to shared data by multiple threads.
13. What is CRTP (Curiously Recurring Template Pattern)?
Answer:
A pattern where a class derives from a template instantiation of itself:
template <typename T>
class Base { /* ... */ };
class Derived : public Base<Derived> { /* ... */ };
Used for static polymorphism.
14. Explain std::forward
and perfect forwarding.
Answer:
std::forward
preserves the value category (lvalue/rvalue) of a function argument.- Perfect forwarding allows functions to pass arguments with original type/category.
15. What is the difference between std::vector
and std::array
?
Answer:
std::vector
: Dynamic size (heap-allocated).std::array
: Fixed size (stack-allocated).
16. How do you handle exceptions in C++?
Answer:
Use try
, catch
, and throw
:
try {
throw std::runtime_error("Error!");
} catch (const std::exception& e) {
std::cerr << e.what();
}
17. What is a friend
function/class?
Answer:
A friend
function/class can access private/protected members of another class. Example:
class A {
int secret;
friend void showSecret(A& a);
};
void showSecret(A& a) { std::cout << a.secret; }
18. What is the PIMPL idiom?
Answer:
Pointer to Implementation hides class details by moving private members to a separate class:
// Header
class Widget {
struct Impl;
std::unique_ptr<Impl> pImpl;
public:
Widget();
~Widget(); // Needed for unique_ptr with incomplete type.
};
19. Explain the difference between std::map
and std::unordered_map
.
Answer:
std::map
: Ordered (Red-Black Tree), O(log n) operations.std::unordered_map
: Hash table, average O(1) operations.
20. What is a smart pointer? List the types in C++.
Answer:
Smart pointers automate memory management:
std::unique_ptr
std::shared_ptr
std::weak_ptr
21. How does std::async
work?
Answer:
Launches a function asynchronously, returning a std::future
:
auto future = std::async(std::launch::async, [](){ return 42; });
std::cout << future.get(); // Blocks until result is ready.
22. What is noexcept
? When should you use it?
Answer:noexcept
indicates a function won’t throw exceptions. Use it for optimizations (e.g., move operations).
23. Explain the Diamond Problem and how to resolve it.
Answer:
Multiple inheritance ambiguity when a class inherits from two classes with a common base. Resolved via virtual
inheritance:
class A {};
class B : virtual public A {};
class C : virtual public A {};
class D : public B, public C {};
24. What is std::variant
? How is it different from a union?
Answer:
std::variant
: Type-safe union (C++17), holds one of multiple types.- Union: Unsafe, requires manual tracking of the active type.
25. How would you implement a thread-safe singleton in C++11+?
Answer:
Use Meyers’ Singleton (thread-safe since C++11):
class Singleton {
public:
static Singleton& getInstance() {
static Singleton instance;
return instance;
}
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
private:
Singleton() = default;
};
This list covers memory management, OOP, concurrency, STL, and modern C++ features—key areas for experienced developers.
- 25 Advanced C++ Interview Questions and Answers for Experienced Developers (2024)
- Memory Management & Smart Pointers
- Understanding new vs malloc() in Modern C++
- RAII: The Foundation of Resource Management in C++
- Smart Pointers Deep Dive: unique_ptr, shared_ptr, and weak_ptr
- Object-Oriented Programming & Design
- Virtual Destructors: When and Why They Matter
- The Rule of Five: Essential for Resource Management
- CRTP: Curious Template Pattern Explained with Examples
- Modern C++ Features
- Move Semantics and Perfect Forwarding Demystified
- constexpr vs const: Compile-Time vs Runtime Constants
- Lambda Expressions: From Basics to Advanced Usage
- Concurrency & Multithreading
- std::thread and Race Conditions: A Practical Guide
- Implementing Thread-Safe Singletons in Modern C++
- Async Programming with std::async and Futures
- STL Containers & Templates
- std::vector vs std::array: Choosing the Right Container
- Map Showdown: std::map vs std::unordered_map
- std::variant: Type-Safe Unions in C++17
- PIMPL: The Pointer-to-Implementation Idiom
- SFINAE and Template Metaprogramming Techniques
- Solving the Diamond Problem with Virtual Inheritance
- Exception Safety & Best Practices
- Exception Handling in Modern C++
- The noexcept Specifier and Optimization Opportunities
- Copy Prevention Techniques in C++ Classes
- C++ Interview Questions Senior Developers Should Know
- Advanced C++ Coding Interview Questions (2024 Edition)
- C++ Expert Interview Prep: OOP, Concurrency & Modern Features
TAGS : CppInterviewQuestions, #AdvancedCpp, #CppProgramming, #ObjectOrientedProgramming, #ModernCpp, #SmartPointers, #RAII, #MoveSemantics, #MemoryManagement, #LowLatencyCpp, #Multithreading, #ConcurrencyInCpp, #STL, #Templates, #LambdaExpressions, #DesignPatterns, #CRTP, #PIMPL, #SingletonPattern, #ExceptionHandling, #TechInterviews, #CodingInterview, #SeniorDeveloper, #SoftwareEngineeringJobs, #FAANGInterview, #LearnCpp, #ProgrammingTips, #CodeNewbie (for intermediate readers), #DevCommunity, #ProgrammingInCpp, #EmbeddedCpp (for firmware roles), #GameDev (if relevant), #HighFrequencyTrading (for finance-focused C++), #SystemsProgramming, #TemplateMetaprogramming