Пожалуйста, проверьте документы на тестовом бегуне wdio. Вам не нужно создавать экземпляр с помощью init самостоятельно. Тестер wdio позаботится о создании и завершении сеанса для вас.
Ваш пример охватывает автономное использование WebdriverIO (без testrunner). Вы можете найти примеры, которые используют wdio здесь .
Чтобы уточнить, существует два способа использования WebdriverIO. Вы можете встроить его в свою тестовую систему самостоятельно (используя ее как автономную / или как скребок). Затем вам нужно позаботиться о таких вещах, как создание и завершение экземпляра, или запуск параллельных операций. Другой способ использования WebdriverIO - использовать его тестовый бегун wdio. Testrunner принимает конфигурационный файл с кучей информации о вашей тестовой настройке, а экземпляры икры обновляют информацию о работе в Sauce Labs и т. Д.
При инстанцировании объекта в C++ код в конструкторе является последней выполняемой вещью. Вся другая инициализация, включая инициализацию суперкласса, выполнение конструктора суперкласса и выделение памяти происходит заранее. Код в конструкторе должен действительно только выполнить дополнительную инициализацию, как только объект создается. Таким образом, это совершенно допустимо, чтобы использовать "этот" указатель в конструкторе класса и предположить, что это указывает на полностью созданный объект.
, Конечно, все еще необходимо остерегаться неинициализированных членских переменных, если Вы уже не инициализировали их в своем коде конструктора.
Можно найти хороший ответ на это здесь (FAQ C++).
Все наследованные участники и члены класса вызова, как гарантируют, будут созданы в начале выполнения кода конструктора и так могут быть сосланы безопасно в нем.
основной глюк - то, что Вы не должны вызывать виртуальные функции на this
. Большинство раз я попробовал это, это только заканчивает тем, что вызвало функцию базового класса, но я полагаю, что в стандарте говорится, что результат не определен.
Как заметка на полях на представленном коде, я был бы вместо этого 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
участник.
Andy, я думаю, что Вы неправы относительно неопределенной части стандарта.
, Когда Вы находитесь в конструкторе, "это" - указатель на объект, тип которого базовый класс объекта, который Вы создаете, что означает, что виртуальные функции, частично реализованные в базовом классе, будут вызваны, и указатели в виртуальной таблице не будут сопровождаться.
[еще 113] информация в часто задаваемые вопросы C++, Облегченные ...