问题标签 [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.
c++ - std::map<>::insert 使用不可复制对象和统一初始化
看看下面的代码:
取消注释 g++ 4.7 上的标记行时,编译此代码段失败。产生的错误表明non_copyable
无法复制,但我希望它会被移动。
为什么插入std::pair
使用统一初始化构造的构造失败但使用构造构造失败std::make_pair
?两者都不应该产生可以成功移动到地图中的右值吗?
c++ - 提升序列化 - 序列化不可复制但可移动的对象?
有可能吗?它不能开箱即用,因为它会在对象未序列化时尝试复制对象
更新 1:这些对象是不可复制的,因为它们分配内存,一旦分配,我看不出有任何理由在可以移动它时进行复制。反序列化部分应尽可能快。
c++ - 禁止在继承类中定义复制构造函数
我想让一个抽象基类不可复制,并强制从它派生的任何类不可复制。下面的代码使用了在 noncopyable.hpp 中定义的 Boost 的 noncopyable,但仍然允许派生类 D 定义一个复制构造函数。
这段代码编译并运行(http://ideone.com/g4gGLm),当我预计它会抛出一个关于 D 的复制构造函数的编译时错误。也许我误解了这个不可复制类的意图。如果是这样,有没有办法强制派生类不定义复制构造函数?(答案可以用C++11,但最好不要boost)
syntax - 将类声明为不可复制的最佳语法是什么?
(假设我不能使用boost::noncopyable
专门为此目的设计的)
(假设我不能使用 C++11)
在使类不可复制时,我通常会看到以下语法:
这种语法似乎冗长。我认为我可以使用以下内容:
这似乎更短(它只重复了类名 3 次而不是 4 次;它也省略了const
and &
)。
我的语法是否与其他语法完全相同?
有什么理由更喜欢其中一个吗?
boost - init boost::optional 不可复制对象
boost::optional< T >
如果基础类型T
是非默认可构造、不可复制/可移动的,但我的实例仍然可以存在,我应该怎么做才能初始化?
boost::optional
出于任何语义原因,是否禁止使用某些成员函数template< typename... Args > boost::optional< T >::construct(Args && ...args)
,例如将所有参数传递到原地operator new
以完全构造对象(对于非引用类型T
)?变体是具有非成员函数,如std::make_shared< T >
.
在我看来,我的问题可以通过使用std::unique_ptr
/来解决std::shared_ptr
,但在这种情况下,我的问题是:“为什么boost::optional
进度会被冻结?”。
c++ - 如何判断一个c++类是否可复制
我有兴趣提高我对如何避免编写复制时导致问题的 C++ 类的理解。
特别是,我编写了一个名为Policy
我打算复制的类。我没有定义非默认析构函数、复制构造函数或复制赋值运算符。我重载的唯一运算符如下:
该类的成员要么是标准数据类型,例如int
, double
, bool
, std::string
, std::vector<double>
, std::vector<int>
, std::vector<string>
,要么是我定义的几个小(因此不会过于复杂)类之一,它们绝对可以毫无问题地复制。现在,它的一个成员是该类Policy
的一个实例NRRan
,它是我构建的一个类,作为对不可复制的第三方数据类型的包装器;NRRan
如下:
但是这NRRan
门课的重点是使可Ranq1
复制。因此,鉴于Policy
我所描述的课程(对不起,我无法发布大部分代码),当我复制时是否有任何可能导致问题的事情Policy
?我的期望是复制将创造出完美的价值复制。
一个更一般的问我问题的方法如下:一般来说,在复制一个类时,哪些类型的东西可能会导致问题? 在使课程可复制时,除了“三法则”(或“五法则”)之外,还有什么需要注意的吗?
c - 防止在 C 中分配类型
给定一个 C 函数:
我想确保 T 分配的所有实例都将失败。到目前为止,我拥有的最佳解决方案是:
有更好的解决方案吗?(理想情况下,我希望将 T 定义为某种不可分配的不透明记录指针类型)。
c++ - C++ 可选<> 和不可复制对象的延迟构造
看下面的代码,
问题是:如何使用 optional<> 延迟构建不可复制的对象。
我在示例中使用了 boost::optional,尽管我相信它现在也在 std::optional 标准中。
是的,我可以使用 scoped_ptr<>,但是我想在堆栈上分配,而不是在堆上。
我正在使用 g++,我认为在这种情况下它是 C++03 还是 C++11 无关紧要,因为它是一个基本的设计问题,而不仅仅是代码中的一个问题。
根据要求,一些错误消息,对于这个,我取消注释:
有一个答案建议直接使用 in_place ,它适用于:
但不是这个:
错误消息:
c++ - Repeating Q_DISABLE_COPY in QObject derived classes
In Qt there is a macro that allows declaring private copy constructurs and assignment operators for classes: http://qt-project.org/doc/qt-5.0/qtcore/qobject.html#Q_DISABLE_COPY
It is said that this macro should be used for all QObject (especially QWidget) derived classes.
I understand how this works and why it is useful.
What I do not understand: Is there any reason to repeat Q_DISABLE_COPY in my QObject derived classes while QObject already contains Q_DISABLE_COPY and through this effectively prevents my derived classes from being copied?
c++ - C++ 不可复制的工作原理是什么?
继承具有私有复制构造函数和赋值运算符的不可复制类如何禁止在派生类上使用复制构造函数和赋值运算符?请在单独回复时考虑以下情况,
如果,默认复制构造函数和赋值运算符是编译器在派生类中生成的,而不是程序员添加的
假设,复制构造函数和赋值运算符被程序员在派生类中定义并声明为public
如果,复制构造函数和赋值运算符被程序员在派生类中定义并声明为私有呢?