C++ C++  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Лёгкий  · 

Конструкторы и деструкторы

Вопросы посвящены не синтаксису списков инициализации, а полному жизненному циклу объекта: какой конструктор действительно вызывается, в каком порядке создаются подобъекты и что останется освобождённым, если построение оборвётся исключением.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. В тесте 20 вопросов, время — 55 минут. Во многих заданиях недостаточно узнать конструкцию: проследите порядок вычислений, время жизни объектов, владение ресурсами и условия, при которых решение остаётся корректным. После завершения откроются правильные ответы, объяснения, общий результат и тематические шкалы.
Вопрос 1 из 20
Зачем однопараметрический конструктор часто помечают explicit?
Вопрос 2 из 20
Что произойдёт с `Distance d = 5;`, если конструктор explicit?
C++C++20
struct Distance { explicit Distance(int meters); };
Distance d = 5;
Вопрос 3 из 20
Какое значение получит Box через делегирующий конструктор по умолчанию?
C++C++20
#include <iostream>
struct Box {
    int value;
    Box(int v) : value(v) {}
    Box() : Box(7) {}
};
int main() { Box b; std::cout << b.value; }
Вопрос 4 из 20
Почему поле-ссылку нужно инициализировать в списке инициализации?
Вопрос 5 из 20
Какое объявление просит компилятор сгенерировать конструктор по умолчанию, даже если есть другие конструкторы?
C++C++20
class Config {
public:
    Config() = default;
    explicit Config(std::string path) : path_(std::move(path)) {}
private:
    std::string path_ = "default.ini";
};
Вопрос 6 из 20
В каком порядке создаются части объекта производного класса?
Вопрос 7 из 20
В какой последовательности сработают конструкторы и деструкторы полей объекта X?
C++C++20
#include <iostream>
struct A { A(){std::cout<<"A";} ~A(){std::cout<<"a";} };
struct B { B(){std::cout<<"B";} ~B(){std::cout<<"b";} };
struct X { A a; B b; };
int main(){ X x; }
Вопрос 8 из 20
Если конструктор третьего элемента массива объектов выбросил исключение, что произойдёт?
Вопрос 9 из 20
Кто задаёт порядок инициализации обычных базовых классов?
Вопрос 10 из 20
Какой объект разрушится первым при выходе из блока?
C++C++20
{
    File a("a.txt");
    File b("b.txt");
}
Вопрос 11 из 20
Когда вызывается деструктор локального объекта автоматического хранения?
Вопрос 12 из 20
Почему базовому полиморфному классу обычно нужен виртуальный деструктор?
Вопрос 13 из 20
Что опасно в деструкторе, который может выбросить исключение?
Вопрос 14 из 20
Какой символ появится при удалении производного объекта через указатель B*?
C++C++20
#include <iostream>
struct B { virtual ~B() = default; };
struct D : B { ~D(){ std::cout << "D"; } };
int main(){ B* p = new D; delete p; }
Вопрос 15 из 20
Какой подход лучше для закрытия файлового дескриптора?
Вопрос 16 из 20
Вызывается ли деструктор класса, если его конструктор не завершился из-за исключения?
Вопрос 17 из 20
Где возможна утечка?
C++C++20
Owner::Owner() {
    a = new ResourceA;
    b = new ResourceB;
}
Вопрос 18 из 20
Как лучше переписать два владеющих поля, чтобы конструктор был безопасен при исключении?
C++C++20
class Service {
public:
    Service()
        : database_(std::make_unique<Database>()),
          cache_(std::make_unique<Cache>()) {}
private:
    std::unique_ptr<Database> database_;
    std::unique_ptr<Cache> cache_;
};
Вопрос 19 из 20
Что происходит с памятью, выделенной выражением `new T(args...)`, если конструктор T выбрасывает?
C++C++20
Widget* p = new Widget(config);
// если Widget(config) бросает, выделенный блок освобождается
// подходящей operator delete автоматически
Вопрос 20 из 20
Какую гарантию должен давать фабричный метод `Connection::open()` при ошибке подключения?
C++C++23
class Connection {
public:
    static std::expected<Connection, Error> open(Address address);
    ~Connection();
private:
    explicit Connection(Socket socket);
    Socket socket_;
};

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу