Описание тега delegating-constructor

A delegating constructor is a C++11 feature that allows a class constructor to delegate to another of its constructors in its initializer-list, much like it can call base class constructors.
1 ответ

Ошибка: выражение не может быть использовано как функция

Я новичок в lambdas, я сделал свой собственный класс двоичной кучи с пользовательской функцией компаратора. Все шло хорошо, пока я не получил ошибку компиляции, и я не знаю, как исправить. Я попытался немного изменить мою строку кода вместо this(cap…
1 ответ

C++: могу ли я выполнить некоторую обработку перед вызовом другого конструктора?

У меня есть класс с двумя конструкторами. class Foo { Foo(B b) {... } Foo(int n) : Foo(buildBFromInt(n)) {} ?? } Первый берет некоторый объект, и я хотел бы иметь второй, который сначала создает объект из более простого типа. Это возможно?
04 авг '15 в 01:18
2 ответа

Сбой в конструкторе с использованием виртуального наследования и делегирования конструкторов

struct D { virtual void m() const = 0; }; struct D1 : public virtual D { }; struct D2 : public virtual D { }; struct B : public D2 { B() { } B(int val) : B() { } void m() const { } }; struct A : public B, public D1 { A() : B(0) { } }; int main() { A…
2 ответа

Делегированный конструктор копирования и инициализация константных данных

У меня есть класс A с большим количеством членов данных, некоторые из которых являются постоянными. Все члены данных имеют надлежащие конструкторы копирования, поэтому я хочу по умолчанию использовать конструктор копирования моего класса: class A { …
2 ответа

Значение аргумента по умолчанию основано на других

Я хочу получить такой класс: class A{ int a; int b; int c; A():a(),b(),c(){}; A(int ia,int ib,int ic=ia+ib):a(ia),b(ib),c(ic){}; //this is what i need }; Я хочу, чтобы значение ic по умолчанию было рассчитано на основе ia и ib, код здесь получит оши…
4 ответа

Как переслать перегруженный вызов конструктора другому конструктору в C++/CLI

Я знаю, что нет никакого способа сделать это в чистом C++, но мне было интересно, можно ли вызвать конструктор из списка инициализации другого конструктора в C++/CLI, так же, как это можно сделать в C#. Пример: ref class Foo { Foo() {} Foo(int i) : …
01 мар '10 в 16:00
1 ответ

Расширение прямого вызова MSVC

В этом ответе tloveless указал, что в MSVC возможно использовать this->foo::foo(42); для делегирования конструктора для непосредственного вызова конструктора: #include <iostream> struct foo { int m; foo(int p) : m(p) { std::cout << "f…
1 ответ

Конструктор делегирует себя в g++ и clang++

Рассмотрим следующую программу. Я случайно ошибся в этом. struct T { int s; T() : T() { s=9; } }; int main() { T t; } Приведенный выше код компилируется и отлично работает в некоторых версиях g ++, таких как g++ 4.8.1 (см. Демонстрационную версию зд…
1 ответ

Делегирующий конструктор C++ со списком инициализации. Какие из них происходят?

Я посмотрел на очень похожий вопрос, но я не совсем уверен, что понимаю ответ. Если я делегирую конструктор, какие инициализации из списков инициализации происходят? Пример: MyClass::MyClass(int a, int b) : MyClass(a, b, NULL), int1(a), int2(b), pOt…
19 фев '14 в 16:27
3 ответа

Делегирование конструктора C++11 с агрегатной инициализацией

Можно ли вызвать агрегатную инициализацию в моем собственном определении ctor по умолчанию? GCC жалуется на "ошибку: конструктор делегирует себя" с кодом ниже: struct X { int x, y, z, p, q, r; X(): x{}, y{}, z{}, p{}, q{}, r{} { } // cumbersome //X(…
3 ответа

Переинициализировать с помощью делегирующего конструктора

У меня есть этот класс X, используя делегирующий конструктор, я хочу изменить только значение i а также j как 0. Можно ли это сделать? class X{ public: X() = default; X(int ival, int jval) : i{ ival }, j{ jval } {} X(int new_i) : i{ new_i }, X(i, 0)…
27 фев '15 в 19:16
2 ответа

Шаблонные занятия - пара вопросов

Мне нужно создать конструктор с двумя целыми числами в качестве аргументов.Оттуда мне нужно вызвать метод, взяв эти целые числа по ссылке. Внутри этого метода я должен динамически преобразовывать целые числа в char* тип (массив цифр). В конце констр…
13 апр '13 в 13:18
3 ответа

Являются ли делегированные C++11 ctors хуже, чем C++03 ctors, вызывающие функции init?

[этот вопрос был сильно отредактирован; простите, я переместил изменения в ответ ниже] Из Википедии (включая статью) на C++11: Эта [ новая функция делегирующих конструкторов ] поставляется с оговоркой: C++03 считает, что объект должен быть построен,…
2 ответа

Вызов конструктора с фигурными скобками вместо паратезов

Недавно я понял, что в C++11 мы можем вызвать делегирующий конструктор списка инициализатора, например Foo() : Foo{42} // delegate to Foo(initializer_list<>) Этот синтаксис правильный? Вроде бы, хотя я бы ожидал всегда использовать круглые ско…
3 ответа

C++: выбор `const char *` vs `std::string` при использовании делегирующего конструктора

Учтите следующее: class Foo { public: Foo (const char *in) { printf ("C string constructor called\n"); } Foo (std::string const &in) : Foo(in.c_str()) { printf ("C++ string constructor called\n"); } }; Foo bar ("I never asked for this"); //C str…
2 ответа

Нет подходящей функции в множественном наследовании

Я новичок в наследовании в C++ и решил попробовать несколько экспериментов, чтобы узнать об этом предмете. Код ниже показывает иерархию классов, которые я создаю: classes.h class base { protected: int _a; int _b; int _c;; base(int b, int c); }; clas…
3 ответа

Как обрабатывать конструкторы, которые должны получать несколько ресурсов безопасным способом

У меня нетривиальный тип, который владеет несколькими ресурсами. Как мне сконструировать это безопасным способом? Например, вот демо-класс X который содержит массив A: #include "A.h" class X { unsigned size_ = 0; A* data_ = nullptr; public: ~X() { f…
1 ответ

В чем разница между делегированием конструкторов в списке инициализатора члена и в теле конструкторов

Конструкторы из C++11 позволяют нам создавать цепочки конструкторов. Например, мы можем закодировать это: Class Foo { public: Foo() { } Foo(int n): Foo() { } }; Я попытался делегировать Foo() как в списке инициализации члена, так и в теле кода. Я по…
13 май '18 в 15:48
2 ответа

Делегирующий конструктор дает ошибку сегментации при использовании поля класса для аргумента

На самом деле ошибка сегментации происходит в другой программе, которую я пытался скомпилировать, что происходит из-за этого поведения. Мой вопрос: Это ошибка или моя вина? Воспроизводится любым способом (даже если something поле является закрытым и…
1 ответ

Могу ли я использовать "это" с делегирующими конструкторами?

В C++11 появилась возможность делегировать конструкцию от одного конструктора другому - "делегирование конструкторов". Но - при этом мы можем использовать указатель this? например, в качестве аргумента одному из конструкторов, которому мы делегируем…
22 июл '19 в 00:22