C ++: умные указатели и шаблон Fluent Design со ссылками - PullRequest
0 голосов
/ 02 августа 2020

Я пытаюсь изучить C ++ после того, как всю свою жизнь баловался языками высокого уровня.

Я бы хотел использовать шаблон проектирования с классом, но Меня беспокоит, что я где-то ошибаюсь и жертвую производительностью.

Скажем, у меня есть класс Builder, и у него есть некоторые свойства и методы членов. Все его методы выглядят примерно так:

Builder &doSomething(SomeTypeThatCouldBeAClassOrAPrimitive &thing)
{
    // do stuff, such as
    // modify a class member
    memberThing = "something";
    
    return *thing;
} 

И говорят, что я использую его так:

unique_ptr<Builder> builder(new Builder());

builder->doSomething(someVal)
        .doAnotherThing(someOtherVal)
        .doAFinalThing(someOtherOtherVal);

Судя по предоставленному коду, я делаю что-то не так, или можно что-то сделать более эффективно?

Пожалуйста, дайте мне знать, если мне нужно предоставить дополнительную информацию.

1 Ответ

2 голосов
/ 02 августа 2020

Здесь нет ничего неправильного , но также нет необходимости размещать объект Builder в куче. Вместо этого рассмотрите:

Builder builder;

builder.doSomething(someVal)
       .doAnotherThing(someOtherVal)
       .doAFinalThing(someOtherOtherVal);

Вы даже можете использовать временную Builder и полностью удалить переменную:

Builder{}.doSomething(someVal)
         .doAnotherThing(someOtherVal)
         .doAFinalThing(someOtherOtherVal);
...