Вызовите конструктора на уже выделенной памяти

Вот мое решение:

     yourEditText.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            NumberFormat formatter = new DecimalFormat("#.##");
            double doubleVal = Double.parseDouble(s.toString());
            yourEditText.setText(formatter.format(doubleVal));
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,int after) {}

        @Override
        public void afterTextChanged(Editable s) {}
    });

Если пользователь вводит число с более чем двумя числами после десятичной точки, оно будет автоматически исправлено.

Надеюсь, что я помогли!

26
задан Ben 6 February 2009 в 10:33
поделиться

2 ответа

Можно использовать размещение новый конструктор, который берет адрес.

Foo* foo = new (your_memory_address_here) Foo ();

Смотрят на более подробное объяснение в C++ FAQ, облегченный или MSDN. Единственная вещь необходимо удостовериться, что память правильно выровненная (malloc, как предполагается, возвращает память, которая является правильно выровненная для чего-либо, но остерегаются вещей как SSE, которому, возможно, понадобится выравнивание приблизительно к 16-байтовым границам).

41
ответ дан Alexandre Vaillancourt 15 October 2019 в 08:07
поделиться

Заметьте, что прежде, чем вызвать размещение new, необходимо назвать деструктор на памяти †“, по крайней мере, если объект или имеет нетривиальный деструктор или содержит участников, которые имеют.

Для объектного указателя obj из класса Foo деструктор можно явно назвать следующим образом:

obj->~Foo();
5
ответ дан Konrad Rudolph 15 October 2019 в 08:07
поделиться
Другие вопросы по тегам:

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