Используя .reset () для освобождения повышения:: shared_ptr с единственным владением

Я думаю, это то, что вы ищете:

CreditCard.fs

namespace StackOverflow

type CreditCard() =
    member val ExpirationDate = "" with get, set
    member val ExpirationYear = "" with get, set
    member val Number = "" with get, set
    member val Cvc = "" with get, set

type CustomerRequest() =
    member val Method = "" with get, set
    member val CreditCard = new CreditCard() with get, set

Program.fs

open System
open StackOverflow

[<EntryPoint>]
let main argv =
    let body = new CustomerRequest(Method = "CREDIT_CARD",
                                        CreditCard = CreditCard(
                                            ExpirationDate = "06",
                                            ExpirationYear = "2022",
                                            Number = "4012001037141112",
                                            Cvc = "123"
                                        ))
    0

Я не знаю много о F # так что, возможно, использование Records, как использует Дэвид Шоу, лучше в дизайне. Но в основном это позволит вам сделать это без конструктора параметров и без изменяемого значения не свойства в вашем типе.

7
задан Zack The Human 23 January 2011 в 05:11
поделиться

2 ответа

shared_ptr <>:: сброс () отбросит refcount одним. Если это приведет к опускающемуся до нуля количеству, то ресурс, на который указывает shared_ptr <>, будет освобожден.

Таким образом, я думаю, что ответ для Вас, да, который будет работать. Или можно просто позволить screenFont переменной быть разрушенной из-за выпадения из объема или что бы то ни было, если это - то, что собирается произойти.

Чтобы быть ясным, нормальное использование shared_ptr <> состоит в том, что Вы позволяете ему быть разрушенным естественно, и он будет иметь дело с refcount и освобождением ресурса, когда он опустится до нуля естественно. сброс () только требуется, если бы необходимо выпустить тот конкретный экземпляр совместно используемого ресурса, прежде чем shared_ptr <> был бы естественно разрушен.

16
ответ дан 6 December 2019 в 12:56
поделиться

B Mike, отвеченный Ваш вопрос, таким образом, я просто прокомментирую Ваш код. Если TTF_OpenFont не возвращает пустой указатель, или если TTF_CloseFont может обработать аннулирует безопасно, Вам не нужен a CloseFont класс вообще, просто используйте &TTF_CloseFont.

0
ответ дан 6 December 2019 в 12:56
поделиться
Другие вопросы по тегам:

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