Como passar na entrevista de C++: principais perguntas e respostas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Como passar em uma entrevista de C++: análise das principais perguntas com exemplos



A entrevista para a posição de desenvolvedor C++ é um teste não apenas de sintaxe, mas também de compreensão profunda de como funcionam a memória, o compilador e a biblioteca padrão. Neste artigo, analisaremos as perguntas mais frequentes em entrevistas nos anos de 2024-2025. Você aprenderá não apenas as respostas corretas, mas também verá exemplos de código que o ajudarão a passar com confiança na entrevista técnica.



1. Funções virtuais e polimorfismo



Isso é clássico. Os entrevistadores querem ter certeza de que você entende a diferença entre ligação estática e dinâmica, bem como o mecanismo de funcionamento da vtable (tabela de funções virtuais).



Pergunta: O que acontece se uma função virtual for chamada a partir de um construtor ou destrutor?



Resposta: A chamada de uma função virtual a partir do construtor da classe base não será polimórfica. No momento da chamada do construtor da classe base, o objeto da classe derivada ainda não foi criado, portanto, a versão da função da classe base será chamada. Da mesma forma para o destrutor — após a chamada do destrutor da classe derivada, o objeto é "rebaixado" para a classe base.



#include <iostream>

class Base {public: Base() { print(); } // Chamada de função virtual no construtor virtual void print() { std::cout << "Base"; } virtual ~Base() = default;};

class Derived : public Base {public: Derived() { print(); } void print() override { std::cout << "Derived"; }};

int main() { Derived d; // Saída: Base (do construtor de Base) // Derived (do construtor de Derived) return 0;}


2. Smart Pointers



Nenhuma entrevista moderna escapa deste tópico. Os smart pointers são a base do RAII e do gerenciamento de recursos em C++.



Pergunta: Qual é a diferença entre std::unique_ptr, std::shared_ptr e std::weak_ptr? Quando usar cada um?



Resposta:

  • unique_ptr — posse exclusiva. Não é copiado, apenas movido. Ideal para recursos que devem ser liberados ao sair do escopo.
  • shared_ptr — posse compartilhada. Usa contagem de referências. Exclui o objeto quando a contagem chega a zero.
  • weak_ptr — "observador" para shared_ptr. Não aumenta a contagem de referências. Usado para prevenir dependências cíclicas.


#include <memory>#include <iostream>

class Resource {public: Resource() { std::cout << "Resource acquired"; } ~Resource() { std::cout << "Resource released"; }};

int main() { // unique_ptr std::unique_ptr<Resource> uptr = std::make_unique<Resource>(); // shared_ptr std::shared_ptr<Resource> sptr1 = std::make_shared<Resource>(); std::shared_ptr<Resource> sptr2 = sptr1; // Contagem de referências = 2 // weak_ptr std::weak_ptr<Resource> wptr = sptr1; // Não aumenta a contagem if (auto locked = wptr.lock()) { std::cout << "Resource is still alive"; } return 0;}


3. Move-semantics e rvalue references



Move-semantics é um dos principais recursos do C++11. Na entrevista, podem pedir para você escrever um move constructor ou explicar o que é uma forwarding reference.



Pergunta: O que é move-semantics e para que serve? Dê um exemplo de quando ela acelera o código.



Resposta: Move-semantics permite transferir a posse de recursos (por exemplo, memória dinâmica) sem copiá-los. Em vez de uma cópia profunda, nós "movemos" os ponteiros, zerando o objeto original. Isso é criticamente importante para o desempenho ao trabalhar com grandes containers.

Blogs

Book Recommendations