C++ 使用类/结构的不同方法-C++;

C++ 使用类/结构的不同方法-C++;,c++,methods,C++,Methods,依我看,它也一样 Foo foo; { foo.SayHello(); } 或者第一种方法有什么优点/区别 有什么想法吗?你的第一个选择是 Foo foo; foo.SayHello(); 这会更有意义,因为foo对象是在包裹它的花括号的较小范围内创建、使用和销毁的。这是一种常见的做法,旨在缩短短暂事物的寿命。通常,这些子块可以重构为单独的函数 在这种特殊情况下,它看起来很奇怪,像是一个需要审查的候选人。在其他情况下可能有用: { Foo foo; foo.SayHello

依我看,它也一样

Foo foo;
{
     foo.SayHello();
}
或者第一种方法有什么优点/区别


有什么想法吗?

你的第一个选择是

Foo foo;
foo.SayHello();

这会更有意义,因为foo对象是在包裹它的花括号的较小范围内创建、使用和销毁的。这是一种常见的做法,旨在缩短短暂事物的寿命。通常,这些子块可以重构为单独的函数

在这种特殊情况下,它看起来很奇怪,像是一个需要审查的候选人。在其他情况下可能有用:

{
  Foo foo;
  foo.SayHello();
}
它将限制
v
的范围。一个常见的用途是使其中的对象更早地销毁。在构造函数和析构函数中执行特殊操作的类可以在大括号中使用:

Foo foo;
{
    ReturnValue v = foo.SayHello();
    Send(v);
}
...
Foo foo;
{
    MutexLocker locker(sendMutex);
    ReturnValue v = foo.SayHello();
    Send(v);
}
...
在该示例中,发送队列的锁将在发送
v
时保持,并在锁柜在关闭时被销毁时释放

与书面内容相同(据我所知)


正如其他人所说,该构造通常用于限制某事物的范围,但在您的示例中,没有区别。

这两个示例中没有区别。但是,以下操作将在大括号范围内创建和销毁foo对象:

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

这对于遵循该习惯用法的对象很有用。

这非常有意义。谢谢你,利特。