Initializes an object from another object
Questions tagged [copy-initialization]
52 questions
                    
                    21
                    
            votes
                
                2 answers
            
        When should you use direct initialization and when copy initialization?
Is it simply preference or are there specific instances where one is necessary over another? I'm refering to the following variants for initialization
T t(e); // direct initialization
T t = e; // copy initialization
         
    
    
        Mike
        
- 219
- 2
- 3
                    14
                    
            votes
                
                2 answers
            
        Copy initialization of the form '= {}'
Given the following:
#include 
class X;
class Y
{
public:
  Y() { printf("  1\n"); }             // 1
  // operator X(); // 2
};
class X
{
public:
  X(int) {}
  X(const Y& rhs) { printf("  3\n"); } // 3
  X(Y&& rhs) { printf("  4\n"); } … 
         
    
    
        Rich
        
- 185
- 1
- 6
                    13
                    
            votes
                
                1 answer
            
        Which of these conversions should be ambiguous?
I have some code like the following:
class bar;
class foo
{
public:
    operator bar() const;
};
class bar
{
public:
    bar(const foo& foo);
};
void baz() {
    foo f;
    bar b = f;   // [1]
    const foo f2;
    bar b2 = f2; // [2]
}
GCC…
         
    
    
        Tavian Barnes
        
- 12,477
- 4
- 45
- 118
                    11
                    
            votes
                
                2 answers
            
        Why does copy initializaton require destructor in C++17 with guaranteed move/copy elision?
The following code compiles with MSVC (/permissive-) and fails to compile with GCC/Clang for m_ptr1 and m_ptr2.
#include 
struct ForwardDeclared;
class A {
    public:
        explicit A();
        ~A();
    private:
       … 
         
    
    
        JVApen
        
- 11,008
- 5
- 31
- 67
                    10
                    
            votes
                
                1 answer
            
        Does copy list initialization invoke copy ctor conceptually?
Before C++11, we can do copy initialization by writing something like A a = 1; which is more or less equivalent to A a = A(1);. That is, a temporary is first created and then a copy ctor is invoked. Regardless of copy elision, this must be so…
         
    
    
        Lingxi
        
- 14,579
- 2
- 37
- 93
                    9
                    
            votes
                
                1 answer
            
        Reference binding through ambiguous conversion operator
#include 
using namespace std;
struct CL2
{
    CL2(){}
    CL2(const CL2&){}
};
CL2 cl2;
struct CL1
{
    CL1(){}
    operator CL2&(){cout<<"operator CL2&"; return cl2;}
    operator const CL2&(){cout<<"operator const CL2&"; return… 
         
    
    
        Denis
        
- 2,786
- 1
- 14
- 29
                    8
                    
            votes
                
                6 answers
            
        Strange behavior of copy-initialization, doesn't call the copy-constructor!
I was reading the difference between direct-initialization and copy-initialization (§8.5/12):
T x(a);  //direct-initialization
T y = a; //copy-initialization
What I understand from reading about copy-initialization is that it needs accessible &…
         
    
    
        Nawaz
        
- 353,942
- 115
- 666
- 851
                    8
                    
            votes
                
                1 answer
            
        Why is copy initialization the way it is? Why require the copy constructor?
Possible Duplicate:
What’s the motivation behind having copy and direct initialization behave differently? 
And by copy initialization, I mean like so:
struct MyStruct
{
    MyStruct(int) {}
    MyStruct(const MyStruct&) {}
};
MyStruct s = 5; //…
         
    
    
        Cornstalks
        
- 37,137
- 18
- 79
- 144
                    6
                    
            votes
                
                1 answer
            
        Can not-copyable class be caught by value in C++?
In the next program, struct B with deleted copy-constructor is thrown and caught by value:
struct B {
    B() = default;
    B(const B&) = delete;
};
int main() {
    try {
        throw B{};
    }
    catch( B ) {
    }
}
Clang rejects the code…
         
    
    
        Fedor
        
- 17,146
- 13
- 40
- 131
                    6
                    
            votes
                
                2 answers
            
        copy initialization - conversion from 'int' to non-scalar type
I would like to know how I should define the class my_int so that the cast from int to std::complex< my_int > is done by the compiler instead of manually by me.
The following program does not compile if 4 is not casted to "my_int"
// Example…
         
    
    
        rual93
        
- 553
- 4
- 11
                    6
                    
            votes
                
                1 answer
            
        This is not copy-initializing, or is it?
In the following code I am not allowed to declare an explicit ctor because the compiler says I am using it in a copy-initializing context (clang 3.3 and gcc 4.8).
I try to prove the compilers wrong by making the ctor non explicit and then declaring…
         
    
    
        Patrick Fromberg
        
- 1,313
- 11
- 37
                    6
                    
            votes
                
                2 answers
            
        Is it possible to infer template parameters of tuple from brace-type initialization?
In this example, is it possible to allow the deduction of the template parameters type of the tuple?
#include
#include
template
void fun(std::tuple t, std::string other){}
int main(){
   …    
         
    
    
        alfC
        
- 14,261
- 4
- 67
- 118
                    4
                    
            votes
                
                1 answer
            
        Why smart pointer type member variable can't be initialized at the declaring place in a class?
When I want to add a member variable with smart pointer type to a class, I found that it can't be initialized at the declaring place:
class Foo {
 public:
  std::shared_ptr intSharedPtr = new int;  // not ok
  Foo() {}
};
But I can do… 
         
    
    
        Zhang Zheng
        
- 91
- 5
                    4
                    
            votes
                
                1 answer
            
        Initialization in return statements of functions that return by-value
My question originates from delving into std::move in return statements, such as in the following example:
struct A
{
    A() { std::cout << "Constructed " << this << std::endl; }
    A(A&&) noexcept { std::cout << "Moved " << this << std::endl; }
…
         
    
    
        Ruperrrt
        
- 489
- 2
- 13
                    4
                    
            votes
                
                1 answer
            
        Why does copy initialization of my class not work with string_view using string literals?
I have the following code:
#include 
class Foo
{
public:
    Foo(std::string_view) {}
};
When I do this, everything compiles fine (using clang v8, C++17):
Foo f("testing");
However, if I use copy initialization it fails:
Foo f =… 
         
    
    
        void.pointer
        
- 24,859
- 31
- 132
- 243