小编Avi*_*ity的帖子

暗中使用析构函数

我有一个删除了析构函数的类(实际上,它需要外部帮助才能被销毁):

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)

这是怎么回事?没有其他成员可以抛出,构造函数体也没有,那么为什么移动构造函数调用析构函数有什么原因呢?

c++ c++11

6
推荐指数
2
解决办法
409
查看次数

是`使用命名空间foo;`没用?

假设我有一个库,它将所有声明放在命名空间中foo.然后我可以通过添加以下内容方便地使用库:

using namespace foo;
Run Code Online (Sandbox Code Playgroud)

到我的源文件.但是,如果foo(例如class foo::socket)中的任何无辜名称现在与全局命名空间名称(例如::socket())不明确.更重要的是,没有办法消除它们的歧义!看起来using namespace只对那些不与全局命名空间冲突的库有用,或者我错过了什么?

编辑:通过"消除歧义"我的意思是一次范围,而不是每个使用网站,这当然是可能的.

我想我们必须等待模块才能获得满意的解决方案.

c++

0
推荐指数
1
解决办法
288
查看次数

标签 统计

c++ ×2

c++11 ×1