Що означає копіювання об'єкта ? Що таке конструктор копій та оператор призначення копії ? Коли мені потрібно оголосити їх самостійно? Як я можу запобігти їх копіювання?
Що це за ідіома і коли її слід використовувати? Які проблеми вона вирішує? Чи змінюється ідіома, коли використовується С ++ 11? Хоча про це згадували в багатьох місцях, у нас не було жодного особливого запитання та відповіді "що це", тож ось воно. Ось частковий перелік місць, де раніше згадувалося: Ваші …
У мене клас: class SymbolIndexer { protected: SymbolIndexer ( ) { } public: static inline SymbolIndexer & GetUniqueInstance ( ) { static SymbolIndexer uniqueinstance_ ; return uniqueinstance_ ; } }; Як я можу змінити його, щоб відключити код, наприклад: SymbolIndexer symbol_indexer_ = SymbolIndexer::GetUniqueInstance ( ); і дозволяти лише такий код, …
Я хочу оновити свою пам’ять про умови, за яких компілятор, як правило, автоматично генерує конструктор за замовчуванням, конструктор копій та оператор призначення. Я пам’ятаю, були деякі правила, але я не пам’ятаю і також не можу знайти авторитетний ресурс в Інтернеті. Хтось може допомогти?
Так як конструктор копій MyClass(const MyClass&); та перевантаження оператора = MyClass& operator = (const MyClass&); мають майже однаковий код, той самий параметр і різняться лише при поверненні, чи можна мати спільну функцію для обох?
Я знаю, що компілятор C ++ створює конструктор копіювання для класу. У якому випадку ми повинні написати призначений користувачем конструктор копіювання? Ви можете навести кілька прикладів?
Чи дійсно копіювати структуру, частина членів якої не ініціалізована? Я підозрюю, що це не визначена поведінка, але якщо так, то це робить залишати будь-яких неініціалізованих членів структури (навіть якщо ці члени ніколи не використовуються безпосередньо) досить небезпечно. Тож мені цікаво, чи є щось у стандарті, що це дозволяє. Наприклад, чи …
Раніше я казав, що безпечно копіювати колекцію, роблячи щось на кшталт: 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); Але чи справді ці "копіюючі" конструктори, подібні статичні методи створення та потоки, справді безпечні та де …