Questions tagged «copy-constructor»


5
什么是复制和交换习语?
这个习语是什么,什么时候应该使用?它可以解决哪些问题?使用C ++ 11时,习惯用法会改变吗? 尽管在很多地方都提到过它,但是我们没有任何奇异的“这是什么”的问题和答案,所以就在这里。这是先前提到的地方的部分列表: 您最喜欢的C ++编码样式惯用法是什么:复制交换 在C ++中复制构造函数和=运算符重载:是否可能使用通用函数? 什么是复制省略及其如何优化复制和交换习惯 C ++:动态分配对象数组?

3
禁用复制构造函数
我有一堂课: class SymbolIndexer { protected: SymbolIndexer ( ) { } public: static inline SymbolIndexer & GetUniqueInstance ( ) { static SymbolIndexer uniqueinstance_ ; return uniqueinstance_ ; } }; 我应该如何修改它以禁用如下代码: SymbolIndexer symbol_indexer_ = SymbolIndexer::GetUniqueInstance ( ); 并且只允许像这样的代码: SymbolIndexer & ref_symbol_indexer_ = SymbolIndexer::GetUniqueInstance ( );




6
为什么拷贝分配运算符必须返回引用/常量引用?
在C ++中,从复制赋值运算符返回引用的概念对我来说还不清楚。为什么复制分配运算符不能返回新对象的副本?另外,如果我有classA和以下内容: A a1(param); A a2 = a1; A a3; a3 = a2; //<--- this is the problematic line 的operator=定义如下: A A::operator=(const A& a) { if (this == &a) { return *this; } param = a.param; return *this; }



4
使用未初始化的成员复制结构
复制一个未初始化其成员的结构是否有效? 我怀疑这是未定义的行为,但如果是这样,则会使任何未初始化的成员保留在结构中(即使从未直接使用这些成员)也很危险。所以我想知道标准中是否有允许它的东西。 例如,这有效吗? struct Data { int a, b; }; int main() { Data data; data.a = 5; Data data2 = data; }

2
如何安全地复制收藏集?
过去,我曾说过要安全地复制集合,请执行以下操作: public static void doThing(List<String> strs) { List<String> newStrs = new ArrayList<>(strs); 要么 public static void doThing(NavigableSet<String> strs) { NavigableSet<String> newStrs = new TreeSet<>(strs); 但是,这些“复制”构造函数,类似的静态创建方法和流是否真的安全?在哪里指定规则?所谓安全,是指Java语言和针对恶意调用者强制执行的集合提供的基本语义完整性保证,并假设有合理的支持SecurityManager且没有缺陷。 我很高兴与方法投掷ConcurrentModificationException,NullPointerException,IllegalArgumentException,ClassCastException,等,或者甚至挂起。 我选择String了一个不可变类型参数的示例。对于这个问题,我对具有自己陷阱的可变类型集合的深层副本不感兴趣。 (很明显,我已经看过了OpenJDK的源代码,并有某种形式的答案为ArrayList和TreeSet。)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.