代码之家  ›  专栏  ›  技术社区  ›  Navaneeth K N

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

  •  2
  • Navaneeth K N  · 技术社区  · 16 年前
    struct Foo
    {
        void SayHello()
        {
            std::cout << "Hi, I am Foo";
        }
    };
    

    Foo foo;
    {
         foo.SayHello();
    }
    

    依我看,它也一样

    Foo foo;
    foo.SayHello();
    

    或者第一种方法有什么优点/区别?

    4 回复  |  直到 16 年前
        1
  •  5
  •   Johannes Schaub - litb    16 年前

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

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

    这将限制 v . 一个常见的用途是使其中的对象更早地销毁。在构造函数和析构函数中执行特殊操作的类可以在大括号中使用:

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

    发送队列的锁将在发送时保持 在该示例中,当锁柜在闭合支架处被破坏时,可以释放。

        2
  •  4
  •   Colin Strasser Colin Strasser    16 年前

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

    {
        Foo foo;
        foo.SayHello();
    }
    

    RAII 习语

        3
  •  0
  •   Uri    16 年前

    你的意思是你的第一个选择是

    {
      Foo foo;
      foo.SayHello();
    }
    

        4
  •  0
  •   Nick    16 年前

    写得一模一样(据我所知)。

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