我的程序的想法是创建一个局部变量,并调用构造函数。当变量超出范围时,将调用析构函数。所有工作都在Ctor和Dtor完成。 基本上我想创建一个我并不真正关心的局部变量,并将其自动销毁。
然后我会做这样的事情:
providers[biggestArrayIndex]
之后我会做这样的事情:
typedef Foo DoInCtor
这将创建我实际上并不关心的本地变量。
这与我的工作类似:
DoInCtor()
这在我的机器上输出以下内容,在Ubuntu 14.04上用g ++ 4.8.4编译:
#include <stdio.h>
#include <typeinfo>
#include <iostream>
class Bar
{
public :
Bar() {printf("BAR, Default Ctor %p\n", this);}
~Bar() {printf("BAR, Default Dtor %p\n", this);}
};
class Foo
{
public :
Bar m_bar;
Foo() : m_bar(Bar()) {printf("FOO, Default Ctor %p\n", this);}
Foo(Bar ref_bar) : m_bar(ref_bar) {printf("FOO, Other Ctor %p", this);}
~Foo() {printf("FOO, Default Dtor %p\n", this);}
};
Foo foo;
int main()
{
Bar bar1;
printf("bar1 address, outside local scope : %p\n", &bar1);
std::cout << "Type of bar1 : " << typeid(bar1).name() << std::endl;
// This is some lcoal scope
{
Foo(bar1);
printf("bar1 address, in local scope : %p\n", &bar1);
std::cout << "Type of bar1 : " << typeid(bar1).name() << std::endl;
}
Foo foo1= Foo(bar1);
printf("foo1 address, in local scope : %p\n", &foo1);
return 0;
}
困扰我的是,在主要功能范围BAR, Default Ctor 0x6021f1
FOO, Default Ctor 0x6021f1
BAR, Default Ctor 0x7ffe6808cfcd
bar1 address, outside local scope : 0x7ffe6808cfcd
Type of bar1 : 3Bar
BAR, Default Ctor 0x7ffe6808cfcf
FOO, Default Ctor 0x7ffe6808cfcf
bar1 address, in local scope : 0x7ffe6808cfcf
Type of bar1 : 3Foo
FOO, Default Dtor 0x7ffe6808cfcf
BAR, Default Dtor 0x7ffe6808cfcf
FOO, Other Ctor 0x7ffe6808cfceBAR, Default Dtor 0x7ffe6808cfcf
foo1 address, in local scope : 0x7ffe6808cfce
FOO, Default Dtor 0x7ffe6808cfce
BAR, Default Dtor 0x7ffe6808cfce
BAR, Default Dtor 0x7ffe6808cfcd
FOO, Default Dtor 0x6021f1
BAR, Default Dtor 0x6021f1
中是bar1
类型,但在本地范围内,它是Bar
类型。
在我看来,这是某种类型的var声明。
我甚至试过跟随gcc:
Foo
并创建了int(a)
类型的变量a
。
这里的问题是,是否有人可以向我提供某种文档,详细解释这一点。一些海湾合作委员会或其他一些文件。
答案 0 :(得分:4)
您只需创建一个名为bar1
的局部变量,该变量将覆盖main
中的变量,其类型为Foo
。您不使用第二个构造函数创建临时Foo
变量。在这种情况下,允许在括号中使用名称。
可疑行与Foo bar1;