unique_ptr - основное улучшение?

Есть встроенный в Django способ достичь того, чего вы хотите. Добавьте поле к модели «пользовательской страницы» с именем primary_key=True и default= функции генерации ключа, например:

class CustomPage(models.Model):
    ...
    mykey = models.CharField(max_length=6, primary_key=True, default=pkgen)
    ...

Теперь для каждого экземпляра модели page, page.pk становится псевдонимом для page.mykey, который автоматически присваивается строке, возвращаемой вашей функцией pkgen() в момент создания этого экземпляра.
Быстрая и грязная реализация:

def pkgen():
    from base64 import b32encode
    from hashlib import sha1
    from random import random
    rude = ('lol',)
    bad_pk = True
    while bad_pk:
        pk = b32encode(sha1(str(random())).digest()).lower()[:6]
        bad_pk = False
        for rw in rude:
            if pk.find(rw) >= 0: bad_pk = True
    return pk

Вероятность того, что две страницы получат идентичные первичные ключи, очень мала (при условии, что random() является достаточно случайной), и нет проблем параллелизма. И, конечно же, этот метод легко расширяем, выделяя больше символов из кодированной строки.

21
задан Sildoreth 7 April 2015 в 17:59
поделиться

4 ответа

Полностью согласен. Наконец-то появился естественный способ обработки объектов, размещенных в куче.

В ответ на:

Я не уверен, но похоже, что это позволяет перемещать группы unique_ptr с помощью memmove () как операции,

было предложение разрешить это, но оно не вошло в Стандарт C ++ 11.

6
ответ дан 29 November 2019 в 22:09
поделиться

Да, вы правы. Я бы только добавил, что это возможно благодаря ссылкам на r-значение.

2
ответ дан 29 November 2019 в 22:09
поделиться

Этот вопрос иллюстрирует, почему мне так нравится сборщик мусора Boehm (libgc). Нет необходимости что-либо копировать по причинам управления памятью, и действительно, владение памятью больше не нужно упоминать как часть API. Вы должны купить немного больше оперативной памяти, чтобы получить такую ​​же производительность процессора, но вы сэкономите сотни часов времени программистов. Вам решать.

0
ответ дан 29 November 2019 в 22:09
поделиться

Похоже, что три условия, которые я перечислил в своем сообщении, можно получить, используя Библиотеку контейнеров указателя ускорения .

1
ответ дан 29 November 2019 в 22:09
поделиться
Другие вопросы по тегам:

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