我有一个删除了析构函数的类(实际上,它需要外部帮助才能被销毁):
struct indestructible {
indestructible(indestructible&&);
~indestructible() = delete;
};
Run Code Online (Sandbox Code Playgroud)
当我尝试使用它的移动构造函数时,编译器会抱怨:
struct user {
indestructible ind;
user(indestructible&& ind) : ind(std::move(ind)) {}
};
indestructible.cc:11:3: error: attempt to use a deleted function
user(indestructible&& ind) : ind(std::move(ind)) {}
^
indestructible.cc:6:3: note: '~indestructible' has been explicitly marked deleted here
~indestructible() = delete;
Run Code Online (Sandbox Code Playgroud)
这是怎么回事?没有其他成员可以抛出,构造函数体也没有,那么为什么移动构造函数调用析构函数有什么原因呢?
假设我有一个库,它将所有声明放在命名空间中foo.然后我可以通过添加以下内容方便地使用库:
using namespace foo;
Run Code Online (Sandbox Code Playgroud)
到我的源文件.但是,如果foo(例如class foo::socket)中的任何无辜名称现在与全局命名空间名称(例如::socket())不明确.更重要的是,没有办法消除它们的歧义!看起来using namespace只对那些不与全局命名空间冲突的库有用,或者我错过了什么?
编辑:通过"消除歧义"我的意思是一次范围,而不是每个使用网站,这当然是可能的.
我想我们必须等待模块才能获得满意的解决方案.