Различные методы для использования класса / структуры - C ++ - PullRequest
2 голосов
/ 25 февраля 2009
struct Foo
{
    void SayHello()
    {
        std::cout << "Hi, I am Foo";
    }
};

У меня есть вышеупомянутая структура. Я видел подобное в одной из наших кодовых баз.

Foo foo;
{
     foo.SayHello();
}

IMO, это так же, как

Foo foo;
foo.SayHello();

Или есть ли преимущество / разница для первого метода?

Есть мысли?

Ответы [ 4 ]

5 голосов
/ 25 февраля 2009

В этом конкретном случае это выглядит довольно странно и как кандидат на проверку. Может быть полезно в других случаях:

Foo foo;
{
    ReturnValue v = foo.SayHello();
    Send(v);
}
...

Где это ограничит область действия v. Одно из распространенных применений - заставить объекты в нем разрушаться раньше. Классы, которые делают специальные вещи в своих конструкторах и деструкторах, могут затем использоваться внутри фигурных скобок:

Foo foo;
{
    MutexLocker locker(sendMutex);
    ReturnValue v = foo.SayHello();
    Send(v);
}
...

Блокировка для очереди отправки будет удерживаться при отправке v в этом примере и сниматься, когда шкафчик разрушается на закрывающей скобке.

4 голосов
/ 25 февраля 2009

Нет никакой разницы в двух примерах. Однако следующее создаст и уничтожит объект foo в области фигурных скобок:

{
    Foo foo;
    foo.SayHello();
}

Это полезно для объектов, которые следуют идиоме RAII .

0 голосов
/ 25 февраля 2009

Идентично как написано (насколько я могу судить).

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

0 голосов
/ 25 февраля 2009

Вы случайно не имели в виду, что ваш первый вариант -

{
  Foo foo;
  foo.SayHello();
}

Это имело бы больше смысла, потому что тогда объект foo создается, используется и уничтожается в пределах меньшего объема фигурных скобок, которые его оборачивают. Это обычная практика, которая направлена ​​на сокращение времени жизни переходных процессов. Часто эти подблоки могут быть преобразованы в отдельные функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...