Защо observer_ptr
не е нулира след операция по преместване?
Той е правилно настроен на nullptr
в конструкцията си по подразбиране и това има смисъл (и предотвратява насочването към боклук).
И, съответно, трябва да се нулира, когато std::move()
'd от, точно както std::string
, std::vector
и т.н.
Това би го направило добър кандидат в няколко контекста, където необработените указатели имат смисъл, както и автоматично генериране на операции за преместване на класове с необработени членове на данни от указатели, като в този случай.
РЕДАКТИРАНЕ
Както @JonathanWakely посочи в коментарите (и това е свързано с гореспоменатия въпрос):
ако
observer_ptr
беше нула след преместване, може да се използва за прилагане на Правилото за нула за типове, които имат член-указател. Това е много полезна функция.
observer_ptr
изглежда като най-нелепото предложение, което съм виждал. - person user541686   schedule 11.03.2014nullptr
. - person Mr.C64   schedule 11.03.2014unique_ptr
,unique_lock
иfuture
абсолютно трябва да разчитате на преместена стойност, в противен случай получавате множество собственици! За дефинирани от потребителя типове с непритежаващи указатели е много полезно да имате нулев тип тъп указател след преместване, вижте stackoverflow.com /a/22307926/981959 - person Jonathan Wakely   schedule 11.03.2014observer_ptr
беше null след движение, може да се използва за прилагане на правилото за нула за типове, които имат член-указател. Това е много полезна функция. Всеки тип, който има член-указател и прави нещо с него в деструктора, ако указателят е различен от нула, може да използваtidy_ptr
(вж.unique_lock
, подобни на ScopeGuard типове и т.н.) - person Jonathan Wakely   schedule 11.03.2014Създавам електронна таблица за инвентаризация за малка компания с много много начинаещи потребители на Excel. Като такъв искам да използвам макроси и VBA, за да свърша по-голямата част от работата, така че да не се претоварват от необходимостта да редактират формула или да създават диаграми. В един идеален свят те биха научили някои отлични, но реалността е, че това няма да се случи.
Досега имам хубава потребителска форма, която улеснява въвеждането и след натискане на бутона за изпращане вмъква всички данни в списък със стоки на първия наличен ред. Искам обаче да сложа и бутон в края на всеки ред, който да натискат, ако даден артикул бъде продаден впоследствие. Написах макрос за това („Разпродажба“), който намалява количеството на артикула, премества подробностите за артикула в продаден лист и изтрива изцяло реда, ако количеството падне до нула. Проблемът ми е, че не мога да накарам бутона за изпращане на моята потребителска форма да добавя макро бутон към променлив номер на ред.
Ето какво имам досега:
Ако го настроя да отиде до клетка с име (т.е. „W5“), той работи и вмъква бутона. Толкова проблематично е просто да го накараш да вмъкне бутон в LRow, 23! Вероятно е доста ясно, но се взирах в това от дни и не мога да го разбера.
- person Jonathan Wakely   schedule 11.03.2014void f(X*)
с указателя (ще поеме ли собственост?) Това е полезно. Просто мисля, че би било по-полезно, ако имаше и едно допълнително свойство и беше null-after-move, в противен случай имам нужда от друг тъп интелигентен указател, който е абсолютно същият, освен че е null-after-move . - person Jonathan Wakely   schedule 11.03.2014tidy_ptr
. - person juanchopanza   schedule 11.03.2014