问题标签 [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 投票
2 回答
388 浏览

c++ - 存在 std::move 时未使用的移动语义

具有以下内容:

为什么ifstream::operator=(const ifstream&)被调用而不是ifstream::operator=(ifstream&&)即使std::move()被调用?

更新:一般来说,有没有办法将左值引用强制为右值引用?

0 投票
2 回答
1479 浏览

html - 如何阻止用户从我的网页复制或打印文本?

我有一个包含文本内容的网页(在 .Net 平台上,使用 C#),我想阻止用户复制文本或打印文档。
如果用户很难获得该页面的副本,我知道他可以。但我想让它尽可能难。
我在上面找到了几点。

  • 使用 Java 脚本阻止用户复制文本。缺点是用户可以轻松地从源中复制文本。
  • 不要将文本制作成 1 张大图,因为用户可以一次性打印出来。
  • 使用插件将文本显示为在定义的视口大小中可滚动,而无法复制文本。然后用户不得不费力地打印出他可以放入窗口视口的每一位,这对我来说很好。在这种情况下使用 Flash。
  • 我见过ionCube 的 (php) 解决方案,您无法复制或查看源文本,但缺点是它可以轻松打印。我想在这里看到一个asp的编码解决方案以及阻止用户打印页面的能力:)
  • Scribd 不是一个解决方案,因为如果您选择阻止用户从您的 scribd 文档中复制文本,它会将文本转换为难以阅读的图像。

可能还有更多我不知道的解决方案。
你能告诉我在这种情况下最好的解决方案吗?

0 投票
2 回答
980 浏览

c++ - 标准布局和不可复制的属性

C++11,第 9/7 节:

标准布局类是这样的类:

  • 没有非标准布局类(或此类类型的数组)或引用类型的非静态数据成员,
  • 没有虚函数,也没有虚基类,
  • 对所有非静态数据成员具有相同的访问控制,
  • 没有非标准布局的基类,
  • 要么在派生最多的类中没有非静态数据成员,并且最多有一个具有非静态数据成员的基类,要么没有具有非静态数据成员的基类,并且
  • 没有与第一个非静态数据成员相同类型的基类。

那么,有没有办法使具有标准布局的类不可复制?如果是,如何?

从 boost::noncopyable 私有继承将不起作用,因为它使复制构造函数私有(因此不是标准布局)。boost::noncopyable 的实现是这样的:

由于私有部分,它不是标准的布局类。我还注意到私有继承是否会破坏任何标准布局规则。


输出是:

上面的示例表明,私有继承boost::noncopyable将类更改为不符合标准布局。我不确定这是否是一个 g++ 错误(我使用的是 g++ 4.6.1),或者该标准在某种程度上被违反了。

0 投票
1 回答
780 浏览

c++ - 创建一个不可复制的类并继承到我的类中

我正在尝试创建一个不可复制的类并将其继承到 myclass。代码如下所示:

删除允许第三种机制通过重用 delete 关键字将函数定义为“已删除”。

现在,当我尝试这个时,我的 VS 2010 上出现错误:'NonCopyable':纯说明符或抽象覆盖说明符只允许在虚拟函数上使用。

编译器认为我正在尝试创建一个纯的非虚函数。有人可以解释为什么吗?我可以通过删除“删除”关键字来解决上述问题。

0 投票
5 回答
31518 浏览

c++ - 在 C++11 中显式删除了成员函数,从不可复制的基类继承是否仍然值得?

在 C++11 中显式删除了成员函数,从不可复制的基类继承是否仍然值得?

我说的是你私下继承基类的技巧,该基类具有私有或已删除的复制构造函数和复制赋值(例如boost::noncopyable)。

这个问题中提出的优点是否仍然适用于 C++11?


我不明白为什么有些人声称在 C++11 中使类不可复制更容易。

在 C++03 中:

在 C++11 中:


编辑:

正如许多人所指出的,为私有复制构造函数和复制赋值运算符提供空主体(即 {})是错误的,因为这将允许类本身调用这些运算符而不会出现任何错误。我一开始没有添加 {},但遇到了一些链接器问题,导致我出于某种愚蠢的原因添加了 {}(我不记得当时的情况)。我知道更好知道。:-)

0 投票
1 回答
2202 浏览

c++ - 错误:“无法访问在类 'boost::signals2::scoped_connection' 中声明的私有成员”?

// .cpp

(注意AddEventOccurredObserver只是委托boost::signals2::connect()并返回boost::signals2::connection

我收到以下错误。很难解释模板错误,但似乎错误是在成员声明中引起的std::vector<boost::signals2::scoped_connection> boostSignalConnections_;

我已经搜索过,我认为这可能与 scoped_connection 不可复制有关?我不知道。我使用 scoped_connection 的原因是因为这个 SO 问题: Handle connection/disconnection of many signals/slots with boost::signals2

更新

仅供参考,当我从 更改scoped_connectionconnection时:std::vector<boost::signals2::connection> boostSignalConnections_;。我使用的全部原因scoped_connection是它们会在破坏时自动断开连接,而我相信 aconnection不会。但是,我可以遍历集合并手动断开每个集合。

0 投票
1 回答
3644 浏览

c++ - OpenMP 是否复制私有对象?

我正在编写一个读取大文件(3x280 GB)并对文件中的数据进行拟合的程序。并行化这样的程序非常方便,这可以通过 OpenMP 轻松完成。

我不明白的是如何在 OpenMP 中获取私有变量。众所周知,fstream 的对象是不可复制的,直观地说,这使我无法将其用作私有对象。所以文件的阅读器是共享的。

后来我遇到了一些问题,我想尝试将 fstreams 设为私有,......你猜怎么着?有效!!!这怎么可能?!如果对象是不可复制的,OpenMP 如何为每个内核使用同一对象的不同副本?

这就是我的程序的样子:

谢谢你。

0 投票
2 回答
365 浏览

c++ - make_pair 类似于不可复制类的技巧

make_pair 可以在不提及类型的情况下创建对。我想对我的类使用相同的技巧,但它继承自 boost::noncopyable,因此无法编译:

有什么选择吗?我试着让 make_bit_writer 成为朋友,然后没有想法了。

0 投票
1 回答
3929 浏览

c++ - 增强不可复制的怪异

我有一个继承自的类boost::noncopyable;说,标题摘录如下:

然后在我的解决方案的一个项目中,我有一个类(也恰好继承自boost::noncopyable),其实现细节中的私有成员是对 A 类型对象的引用,例如,在标题摘录中:

并在实施摘录(cpp)中:

然后在我的解决方案的另一个项目中,我有一个从 B 继承的 C 类,例如,带有标题摘录:

并在实施摘录(cpp)中:

但是当我尝试在 MSVC++ 2008 中构建时,出现以下错误:

编译器只对 C 的set_A函数有问题,对 B 没有问题set_A。欣赏是否有人对此有任何想法并可以阐明?一如既往地感谢您的关注。

编辑:

总而言之,我在这里不明白的是为什么编译器对何时应用有关boost::noncopyable. 当我注释掉set_A(..)C 类中的函数时,一切编译正常。但是当我保留它时,它会给出错误,而在 B 类中它没有任何问题。我还稍微编辑了上面的错误消息以提供更多细节。我在这里注意到它说明了一些关于编译器生成函数的内容。会不会因为某种原因只发生在 C 类?为什么?

0 投票
1 回答
228 浏览

c++ - 模板类中不可复制的静态 const 成员类

我有一个不可复制的(继承自boost::noncopyable)类,用作自定义命名空间。另外,我还有另一个类,它使用以前的类,如下所示:

此代码导致下一个错误(即使没有实例化):

错误:在类“custom_namespace_user”中没有声明“const custom_namespace custom_namespace_user::custom_namespace_()”成员函数

下一种方式是不合法的:

我应该怎么做才能声明这两个类(首先是第二个不可复制的静态 const 成员类)?这可行吗?