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);
}
...
这对于遵循该习惯用法的对象很有用。这非常有意义。谢谢你,利特。