问题标签 [noncopyable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
170 浏览

c++ - 有没有办法 static_assert 模板参数是不可复制的?

有没有办法确定某些类型在编译期间是不可复制的?我需要以下内容:

0 投票
1 回答
5462 浏览

c++ - 如何在 V8 中存储持久句柄?

我希望我的班级拥有 av8::Context和 av8::External作为成员。因此,我认为我必须使用持久句柄。

但是,持久句柄在 V8 中是不可复制的,因此代码无法编译。错误发生在两个成员被初始化的行中。对于上下文,this 在构造函数的初始化列表中,对于外部,this 在构造函数体内。

1> 错误 C2440: '=' : 无法从 'v8::Primitive *' 转换为 'v8::Object *volatile'
1> 指向的类型不相关;转换需要 reinterpret_cast、C-style cast 或 function-style cast
1> include\v8\v8.h(603) : 请参阅对正在编译的函数模板实例化 'void v8::NonCopyablePersistentTraits::Uncompilable(void)' 的引用

我考虑过使用指向持久句柄的指针,但这似乎违反直觉,因为句柄的概念已经暗示了某种引用。此外,我认为句柄会被破坏,以便 V8 的内部垃圾收集器可以清理对象。

如何将 V8 对象持久存储为类成员?

更新:即使我使用指向持久句柄的指针,对于返回持久句柄的方法,我也会遇到相同的编译器错误。

0 投票
3 回答
1145 浏览

c++ - 具有显式构造函数的不可复制类型的 C++11 数组初始化

我有一个不可复制的(第三方)类。我想初始化它们的数组。这是我最好的尝试:

GCC 4.7.2 说:

错误:从初始化列表转换为 'std::array::value_type {aka Thing}' 将使用显式构造函数 'Thing::Thing(int)'</p>

好的,但这正是我想要的——使用显式构造函数。我该如何表达?如果我真的自己调用构造函数,那么我会收到一个关于复制构造函数被删除的错误。而且我不能使用std::move(),因为 Thing 是不可移动的(我不能修改它)。

到目前为止,我发现的唯一替代方法是https://stackoverflow.com/a/15962814/4323,但这是不可取的,因为它是一堆额外的代码,而且我需要在我使用它的任何地方投射“存储”(或保留一个单独的指向它的指针,它增加了我不想要的间接性)。

我想要一个解决方案,在实际使用 Things 时提供最佳性能,而没有很多丑陋的样板。

0 投票
6 回答
838 浏览

c++ - 为不可复制对象选择构造函数

假设我有一个具有多个构造函数的不可复制类,如下所示

现在,我想构造一个对象,并选择在运行时使用哪个构造函数:

我可以用这样的指针来做到这一点: -

但这感觉混乱而缓慢。有没有一种简单的方法来选择对象的构造函数而不诉诸动态分配?


更多细节:Foo上面的类只是为了说明问题。实际涉及的类是 Windows Gdiplus::Bitmap- http://msdn.microsoft.com/en-gb/library/windows/desktop/ms534420(v=vs.85)。 aspx

0 投票
1 回答
1461 浏览

c++ - 在地图中存储没有默认构造函数的不可复制对象(C ++ 11)

我正在尝试实现一个表示与文件的连接的类,因此它应该是一个不可复制的类。此外,由于创建对象需要文件名,我想删除默认构造函数。

这是此类的简化定义:

但是,当我尝试将此类对象存储在标准映射中时,代码无法编译:

我收到以下错误(gcc 4.9.1):

关于如何实现这一点的任何线索?我的结构中是否存在其他设计缺陷?

提前致谢

0 投票
1 回答
427 浏览

c++ - 是否可以初始化不可复制对象的向量向量?

是否可以初始化不可复制对象的向量向量?

我明白为什么上面的代码无法编译。我要问的是是否有解决方法。似乎如果std::vector有一个这样的成员函数resize_from_zero不需要复制构造函数,那么这将是可行的。

(我的问题是关于 C++03,如果这有所作为)

0 投票
1 回答
639 浏览

c++ - 使类不可复制的宏

以下宏是否存在使类不可复制的问题?

0 投票
2 回答
176 浏览

c++ - 如何使用具有不可复制类的向量(或不同的容器)?

我有以下代码:

PrepareLogFileThread继承自使用的Threadpthread(我们使用 c++98 标准....,我可以使用auto_ptr)。

这里的问题是Thread' 的复制构造函数是私有的,因此不会弄乱执行或其他东西(我不是这个类的作者)。

这里的想法是我创建我的PrepareLogFileThread对象push_backv启动它们,然后它们都在f返回之前完成。

PrepareLogFileThread有析构函数调用,pthread_join以便它在那里完成。

但我不能,因为我复制a符合push_back.

Thread如果没有 c++11 和更改的复制构造函数,我怎么能做到这一点?

我正在使用 gcc 4.4.6,我可以使用auto_ptr.

0 投票
2 回答
366 浏览

c++ - C++ - 如何反复重新初始化对象?

我正在尝试在 C++ 中实现这个逻辑:

但我不能使用这个确切的代码,因为Object继承boost::noncopyable所以它没有赋值运算符。我可以向 , 添加方法和构造函数Object(但不能使其可复制),但我不希望这样做。其他问题有手动销毁和放置 new 作为解决方案,如果我为Object. 我有什么选择?

0 投票
3 回答
695 浏览

c# - 是否可以在 C# 中创建不可复制的类型

在 C# 中是否有可能创建一个无法复制但只能通过引用传递的类?

C++ 中的等价物是删除复制构造函数和复制赋值运算符。