для меня это сделало трюк!
navigationView = (NavigationView) findViewById (R.id.nav_view);
navigationView.bringToFront ();
Если Вы не определите конструктора, то компилятор определит конструктора по умолчанию для Вас.
реализация этого
Примечание:
данные POD (интервал, плавание, указатель, и т.д.) не имеют явного конструктора, но действие по умолчанию ничего не должно делать (в лопасти философии C++; мы не хотим платить за что-то, если мы явно не просим его).
, Если никакой Конструктор/Оператор присваивания деструктора/копии не определяется сборки компилятора один из тех, которые для Вас (таким образом, класс всегда имеет Конструктора/Оператор присваивания деструктора/Копии (если Вы не обманываете и явно объявляете один, но не определяете его)).
реализация по умолчанию:
Конструкция/Оператор присваивания Копии Примечания Данных POD просто копирует данные (Следовательно мелкая проблема копии, связанная с НЕОБРАБОТАННЫМИ указателями).
Я думаю, что стоит указать, что конструктор по умолчанию будет только создан компилятором, если Вы обеспечите никакой конструктор безотносительно . Это означает, предоставляете ли Вы только одному конструктору, который берет аргумент, компилятор будет не , создают конструктора без аргументов по умолчанию для Вас.
поведение обнуления, что Ваши переговоры по книге о, вероятно, характерны для конкретного компилятора. Я всегда предполагал, что это может варьироваться и что необходимо явно инициализировать любые элементы данных.
C++ действительно генерирует конструктора по умолчанию, но только если Вы не обеспечиваете одно собственное. В стандарте ничто не говорится об обнулении элементов данных. По умолчанию, когда Вы сначала создаете любой объект, они не определены.
Это могло бы сбивать с толку, потому что большинство типов примитивов C++ ДЕЙСТВИТЕЛЬНО имеет "конструкторов" по умолчанию, которых init их для обнуления (интервал (), bool (), дважды (), долго (), и т.д. ), но компилятор не называет их к init участникам POD как он, делает для элементов объекта.
стоит отметить, что STL делает использование эти конструкторы к конструкции по умолчанию содержание контейнеров, которые содержат типы примитивов. Можно смотреть на этот вопрос для получения дополнительной информации о том, как вещи в контейнерах STL получают inited.
Конструктор по умолчанию, созданный для класса, не инициализирует встроенные типы, но он назовет конструктора по умолчанию на всех пользовательских участниках:
class Foo
{
public:
int x;
Foo() : x(1) {}
};
class Bar
{
public:
int y;
Foo f;
Foo *fp;
};
int main()
{
Bar b1;
ASSERT(b1.f.x == 1);
// We know nothing about what b1.y is set to, or what b1.fp is set to.
// The class members' initialization parallels normal stack initialization.
int y;
Foo f;
Foo *fp;
ASSERT(f.x == 1);
// We know nothing about what y is set to, or what fp is set to.
}
Компилятор генерирует конструкторов по умолчанию и деструкторы, если созданные пользователями не будут присутствовать. Они НЕ изменят состояние никаких элементов данных.
В C++ (и C) содержание любых выделенных данных не гарантируется. В настройках отладочного процесса некоторые платформы установят это на известное значение (например, 0xFEFEFEFE), чтобы помочь определить ошибки, но на это нельзя положиться.
Обнуление только происходит для globals. Таким образом, если Ваш объект будет объявлен в глобальной области видимости, то ее участники будут обнулены:
class Blah
{
public:
int x;
int y;
};
Blah global;
int main(int argc, char **argv) {
Blah local;
cout<<global.x<<endl; // will be 0
cout<<local.x<<endl; // will be random
}
C++ генерирует конструктора по умолчанию. В случае необходимости (определенный во время компиляции я верю), это также генерирует конструктора копии по умолчанию и конструктора присвоения по умолчанию. Я ничего не услышал о гарантиях обнуления памяти все же.
C++ делает не гарантия, обнуляющая память. Java и C# делают (так сказать).
Некоторые компиляторы могли бы, но не зависеть от этого.