10 question c++

      Comments Off on 10 question c++

https://tests4geeks.com/cpp-interview-questions/

[Question #1 – Smart Pointer – Standard library]
[Question #2 – Rule of Five – RAII]
[Question #3 – Finding bugs – Basics]
[Question #4 – Automatic objects – RAII]
[Question #5 – Iterators – Standard library]
[Question #6 – Undefined/unspecified behaviour – Standards]
[Question #7 – Macros – Preprocessor]
[Question #8 – Pointer detector – Templates]
[Question #9 – Insertion sort – Templates]
[Question #10 – Max heap – Algorithms and data structures]

////////////////////////////////////////////////////////////
Question #1 – Smart Pointer – Standard library
Điều gì sẽ xảy ra khi ta truyền smart pointer std::unique_ptr vào 1 hàm ví dụ.

#include <memory>

auto f(std::unique_ptr<int> ptr) {
  *ptr = 42;
  return ptr;
}

int main() {
  auto ptr = std::make_unique<int>();
  ptr = f(ptr);
}

==> Trình biên dịch sẽ báo lỗi vì std::unique_ptr không thể gán được.
Chỉnh sửa như sau để chương trình chạy được

   ptr = f(std::move(ptr)); // f() là rvalue nên nó sẽ tự động gọi hàm move. Nên nhớ là unique_ptr không có hàm copy constructor.
   // Khái niệm rvalue sinh ra để tự động gọi hàm move constructor. Muốn assign thì phải có copy constructor, muốn move thì phải có move constructor.
   // Trình biên dịch tự động gọi move or copy dựa vào giá trị truyền vào là rvalue or lvalue.