Передача “этого” к функции из конструктора?

Пожалуйста, проверьте документы на тестовом бегуне wdio. Вам не нужно создавать экземпляр с помощью init самостоятельно. Тестер wdio позаботится о создании и завершении сеанса для вас.

Ваш пример охватывает автономное использование WebdriverIO (без testrunner). Вы можете найти примеры, которые используют wdio здесь .

Чтобы уточнить, существует два способа использования WebdriverIO. Вы можете встроить его в свою тестовую систему самостоятельно (используя ее как автономную / или как скребок). Затем вам нужно позаботиться о таких вещах, как создание и завершение экземпляра, или запуск параллельных операций. Другой способ использования WebdriverIO - использовать его тестовый бегун wdio. Testrunner принимает конфигурационный файл с кучей информации о вашей тестовой настройке, а экземпляры икры обновляют информацию о работе в Sauce Labs и т. Д.

29
задан 14 January 2009 в 23:44
поделиться

4 ответа

При инстанцировании объекта в C++ код в конструкторе является последней выполняемой вещью. Вся другая инициализация, включая инициализацию суперкласса, выполнение конструктора суперкласса и выделение памяти происходит заранее. Код в конструкторе должен действительно только выполнить дополнительную инициализацию, как только объект создается. Таким образом, это совершенно допустимо, чтобы использовать "этот" указатель в конструкторе класса и предположить, что это указывает на полностью созданный объект.

, Конечно, все еще необходимо остерегаться неинициализированных членских переменных, если Вы уже не инициализировали их в своем коде конструктора.

32
ответ дан MattK 14 October 2019 в 08:54
поделиться

Можно найти хороший ответ на это здесь (FAQ C++).

Все наследованные участники и члены класса вызова, как гарантируют, будут созданы в начале выполнения кода конструктора и так могут быть сосланы безопасно в нем.

основной глюк - то, что Вы не должны вызывать виртуальные функции на this. Большинство раз я попробовал это, это только заканчивает тем, что вызвало функцию базового класса, но я полагаю, что в стандарте говорится, что результат не определен.

4
ответ дан manlio 14 October 2019 в 08:54
поделиться

Как заметка на полях на представленном коде, я был бы вместо этого templatize void*:

class Stuff
{
public:
    template <typename T>
    static void print_number(const T& t)
    {
        std::cout << t.number;
    }

    int number;

    Stuff(int number_)
    : number(number_)
    {
        print_number(*this);
    }
};

Тогда Вы получили бы ошибку компиляции, если тип t не имеет number участник.

0
ответ дан Johann Gerell 14 October 2019 в 08:54
поделиться

Andy, я думаю, что Вы неправы относительно неопределенной части стандарта.

, Когда Вы находитесь в конструкторе, "это" - указатель на объект, тип которого базовый класс объекта, который Вы создаете, что означает, что виртуальные функции, частично реализованные в базовом классе, будут вызваны, и указатели в виртуальной таблице не будут сопровождаться.

[еще 113] информация в часто задаваемые вопросы C++, Облегченные ...

-2
ответ дан random 14 October 2019 в 08:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: