C ++如何将析构函数添加到匿名class?
C++ how to add destructor to anonymous class?
如何在 C++ 中向匿名 class 添加析构函数?就像在 PHP 中,如果我想 运行 一些东西,当我的 class 超出范围时,它会是
$foo = new class() {
public $i=0;
public function __destruct()
{
echo "foo is going out of scope!\n";
}
};
但在具有普通非匿名 classes 的 C++ 中,您使用 ~ClassName(){}
指定析构函数,但匿名 classes 没有名称!那么如何将析构函数添加到
class {public: int i=0; } foo;
在 C++ 中?我尝试使用变量名称作为 class 名称,但这没有用:
class {
public:
int i;
~foo(){std::cout << "foo is going out of scope!" << std::endl;}
} foo;
导致
prog.cc: In function 'int main()':
prog.cc:51:31: error: expected class-name before '(' token
51 | class {public: int i=0; ~foo(){std::cout << "foo is going out of scope!" << std::endl;};} foo;
| ^
我也试过只指定 ~
但这也不起作用,
class {
public:
int i=0;
~(){std::cout << "foo is going out of scope" << std::endl;}
} foo;
结果
prog.cc:48:30: error: expected class-name before '(' token
48 | class {public: int i=0; ~(){std::cout << "foo is going out of scope" << std::endl;};} foo;
| ^
这在 C++ 中无法完成。但是,真正的 C++ 匿名 类 类似物称为匿名命名空间:
namespace {
struct foo {
// ... whatever
~foo();
};
}
// ... later in the same C++ source.
foo bar;
现在您可以在这个特定的 C++ 源文件中的任何地方使用和引用 foo
。其他 C++ 源文件可能有自己的匿名命名空间,有自己的 foo
s,不会产生冲突。最终结果与 C-style 匿名结构(a.k.a。类)几乎相同,除了它们不是真正的匿名,只有它们的命名空间是。
如何在 C++ 中向匿名 class 添加析构函数?就像在 PHP 中,如果我想 运行 一些东西,当我的 class 超出范围时,它会是
$foo = new class() {
public $i=0;
public function __destruct()
{
echo "foo is going out of scope!\n";
}
};
但在具有普通非匿名 classes 的 C++ 中,您使用 ~ClassName(){}
指定析构函数,但匿名 classes 没有名称!那么如何将析构函数添加到
class {public: int i=0; } foo;
在 C++ 中?我尝试使用变量名称作为 class 名称,但这没有用:
class {
public:
int i;
~foo(){std::cout << "foo is going out of scope!" << std::endl;}
} foo;
导致
prog.cc: In function 'int main()':
prog.cc:51:31: error: expected class-name before '(' token
51 | class {public: int i=0; ~foo(){std::cout << "foo is going out of scope!" << std::endl;};} foo;
| ^
我也试过只指定 ~
但这也不起作用,
class {
public:
int i=0;
~(){std::cout << "foo is going out of scope" << std::endl;}
} foo;
结果
prog.cc:48:30: error: expected class-name before '(' token
48 | class {public: int i=0; ~(){std::cout << "foo is going out of scope" << std::endl;};} foo;
| ^
这在 C++ 中无法完成。但是,真正的 C++ 匿名 类 类似物称为匿名命名空间:
namespace {
struct foo {
// ... whatever
~foo();
};
}
// ... later in the same C++ source.
foo bar;
现在您可以在这个特定的 C++ 源文件中的任何地方使用和引用 foo
。其他 C++ 源文件可能有自己的匿名命名空间,有自己的 foo
s,不会产生冲突。最终结果与 C-style 匿名结构(a.k.a。类)几乎相同,除了它们不是真正的匿名,只有它们的命名空间是。