Как переопределение должно удалить в C++, ведут себя?

В общих настройках данные хранятся в формате «ключ-значение». Насколько я понимаю, вам нужно сохранить два поля, и это будет примерно так:

“booking: true”
“bookmarkImageResource: 15670341274”

Вот удобный способ сделать это:

Шаг первый [ 1110] - создайте новый класс SharedPrefs:

public class SharedPrefs {

private static final String SHARED_PREFERENCES_NAME = "user_prefs";
private static final String BOOKING_INFO = "booking";
private static final String BOOKMARK_IMAGE_RESOURCE_INFO = "bookmarkImageResource";
private final SharedPreferences prefs;

public SharedPrefs(Context context) {
    prefs = context.getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
}

public boolean saveBookingInfo(String bookingInfo, String bookmarkImageResource) {
    return prefs.edit()
            .putString(BOOKING_INFO, bookingInfo)
            .putString(BOOKMARK_IMAGE_RESOURCE_INFO, bookmarkImageResource)
            .commit();
}

public Pair<String, String> getBookingInfo() {
    return new Pair<String, String>(
            prefs.getString(BOOKING_INFO, ""),
            prefs.getString(BOOKMARK_IMAGE_RESOURCE_INFO, ""));
}

public void clearAll() {
    prefs.edit().clear().apply();
}

}

Шаг второй - используйте свой класс везде, где вам нужно сохранять, получать или очищать данные! В вашем случае:

    SharedPrefs prefs = new SharedPrefs(this);  // or getActivity() instead of this if we are in a fragment      
    if(bookmarking){
        bookmark.setImageResource(R.drawable.ic_bookmarked_blue);
        bookmarking=false;
    }
    else{
        bookmarking=true;
        bookmark.setImageResource(R.drawable.ic_bookmark);
    }
    prefs.saveBookingInfo(String.valueOf(bookmarking), String.valueOf(bookmark));

Надеюсь, это поможет вам =)

Хорошего дня и удачи. Удачного кодирования!

9
задан DigviJay Patil 10 June 2015 в 12:55
поделиться

2 ответа

Это - конечно, Стандартное Поведение. Если новый оператор производного класса использовался, его оператор удаляют, будет также использоваться (также примечание даже при том, что Вы явно не говорите компилятору, что те функции статичны, они неявно объявляются так). Мог бы быть непослушный случай, где у Вас есть оператор, новый в производном классе, но соответствующий оператор удаляет, находится в базовом классе. Я думаю, что это допустимо, но я избежал бы этого. Доверие основному оператору удаляет при определении, которые собственный оператор, новый в производном классе, будет неизбежная причина обеспокоить.

Если я не определяю деструкторов затем, я получаю то, что я ожидал происходить:

Вы получите неопределенное поведение :) Все может произойти, включая что-то, что Вы ожидали бы (неправильно). Удаление через указатель базы, который указывает на объект другого типа, требует виртуального деструктора. Неявно заявленный деструктор не является виртуальным.

Когда должен, я использовать оператор void удаляю (пусто *, size_t);

Если Вы хотите иметь размер, который был выделен известный в операторе, удаляют. Я записал о том, что это означает здесь: Что делает C++, который новый оператор делает кроме выделения и вызова ctor?. Если Вы используете (из Вашего перегруженного членского оператора, delete/new) глобальный новый оператор, и удаляете, чтобы получить Вашу память и выпустить его, или даже malloc / свободный, Вам не нужна та информация о размере. Но это могло быть полезно для входа целей.

8
ответ дан 4 December 2019 в 14:32
поделиться

(эй, я должен отправить сначала и искать позже :))

Вот соответствующие выборки из Стандарта:

1 оператор удалять-выражения уничтожает большую часть производного объекта (intro.object) или массива, созданного новым выражением. удалять-выражение::: выберите удаляют выражение приведения типа:: выберите удаляют [] выражение приведения типа, которое первая альтернатива для объектов немассива, и второе для массивов. Операнд должен иметь тип указателя или тип класса, имеющий функцию однократного преобразования (class.conv.fct) к типу указателя. Результат имеет тип пусто.

3 В первой альтернативе (удаляют объект), если статический тип операнда отличается от своего динамического типа, статический тип должен быть базовым классом динамического типа операнда, и статический тип должен иметь виртуальный деструктор, или поведение не определено. Во второй альтернативе (удаляют массив), если динамический тип объекта, который будет удален, отличается от своего статического типа, поведение не определено 19),

6
ответ дан 4 December 2019 в 14:32
поделиться
Другие вопросы по тегам:

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