标签: default-copy-constructor

具有自动默认和移动构造函数的Uncopyable类

我想让一些类使用自动生成的构造函数,但是不可复制(但仍可移动).目前我这样做:

class A
{
public:
    A() = default;
    A(const A&) = delete;
    A(A&&) = default;
    A& operator=(const A&) = delete;
    A& operator=(A&&) = default;
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否真的有必要这么明确.如果我这样写的话怎么办:

class A
{
    A(const A&) = delete;
    A& operator=(const A&) = delete;
}
Run Code Online (Sandbox Code Playgroud)

它仍然可以工作吗?对于其他情况,最小的默认值和删除集是什么 - 不可复制的非可移动类和具有虚拟析构函数的类?

是否有任何测试代码可用于快速查看隐式创建的构造函数?

c++ default-copy-constructor move-constructor c++11

5
推荐指数
1
解决办法
915
查看次数

C#实例拷贝/传递对象引用与Java不同?

class Player
{
   private Location location;

   public Location getLocation()
   {
        return location;
   }

    public void setLocation(Location location)
    {
        this.location = location;
    }
}
Run Code Online (Sandbox Code Playgroud)

...

class Location
{
    int x,y,z;

    public Location(int x, int y, int z)
    {
        this.x = x;
        this.y = y;
        this.z = z;
    }

    public Location(Location location)
    {
        this.x = location.x;
        this.y = location.y;
        this.z = location.z;
    }


    public void updateLocation(Location location) //the fix..
    {
        this.x = location.x;
        this.y = location.y;
        this.z = location.z;
    }
}
Run Code Online (Sandbox Code Playgroud)

说..你做 …

c# multiple-instances visual-studio default-copy-constructor

4
推荐指数
1
解决办法
1732
查看次数

未声明的复制构造函数是否自动内联?

未声明(自动生成)的复制构造函数是否自动标记为inline

如果是这样,如果我不希望它们被标记为inline,这是否意味着我必须手动定义一个并手动复制我需要的每个成员(假设我没有使用C++ 11,所以没有= default从中获利)?

c++ inline copy-constructor default-copy-constructor c++03

3
推荐指数
2
解决办法
858
查看次数

2个默认的拷贝构造函数:这可能吗?

以下计划是否格局不正确?

struct Foo
{
    Foo(Foo&) = default;

    Foo(const Foo&) = default;
};

int main() 
{
}
Run Code Online (Sandbox Code Playgroud)

它成功编译了clang ++ 3.8.0g ++ 6.3.0(编译器标志-std=c++11 -Wall -Wextra -Werror -pedantic-errors).

c++ default copy-constructor default-copy-constructor c++11

3
推荐指数
1
解决办法
98
查看次数

选择退出复制构造函数

这可能是一个愚蠢的问题,但......

我一直在写一些利用不可复制成员的课程.这些类永远不会通过我的源代码中的复制构造函数初始化.当我尝试编译而不提供我自己的拷贝构造函数时,由于不可复制的成员对象,g ++抛出了很多关于如何无法构建默认拷贝构造函数的错误.

有没有办法告诉编译器不给我一个复制构造函数?

编辑: 是的... 感觉很傻 ......我有一个案例,我在boost :: bind调用中偶然调用了copy-constructor.学过的知识.

c++ g++ default-copy-constructor

1
推荐指数
2
解决办法
243
查看次数

初始化引用时避免按值复制

我有一个功能界面:

struct iFace {
  virtual Type& getType() = 0;
}
Run Code Online (Sandbox Code Playgroud)

并且想法是检索它,如:

iFace& iface = getIface();
Type& type = iface.getType();
Run Code Online (Sandbox Code Playgroud)

然而,我偶尔会犯错误并写道:

Type type = iface.getType();
Run Code Online (Sandbox Code Playgroud)

按值复制,这​​是我想要避免的.但是,当我犯这样的错误时,编译器不会发出警告,因为它的法律语法.我想为此触发一个编译时错误,我有什么选择?

我想要声明一个复制构造函数,但没有在任何地方定义它,如果使用它会导致链接时错误,但是我将无法在任何情况下使用复制构造函数,这不是很容易

c++ return-by-reference default-copy-constructor

1
推荐指数
1
解决办法
131
查看次数

编译如何选择要调用的构造函数?

这是我的代码。

当我删除第11行时,输出为

A(0)
B(0)
A(1)
Run Code Online (Sandbox Code Playgroud)

关于最后一行“ A(1)”,为什么要调用类A的第二个构造函数?

#include <iostream>

using namespace std;

class A {
public:
   A() { cout << "A(0)" << endl; }
   A(const A& a) { cout << "A(1)" << endl; }
};

class B {
public:
    B() : a() { cout << "B(0)" << endl; }
    // B(const B& b) { cout << "B(1)" << endl; }
private:
    A a;
};

int main() {
   B object1;
   B object2 = object1;
   return 0;
}
Run Code Online (Sandbox Code Playgroud)
A(0)
B(0)
A(1)
Run Code Online (Sandbox Code Playgroud)

c++ constructor class copy-constructor default-copy-constructor

1
推荐指数
1
解决办法
111
查看次数

为什么在复制构造函数中使用&符号?

为什么我们通过引用传递类的对象.当我删除&符号(&)时出现以下错误.

"Copy constructor of class A may not have parameter of type A"
Run Code Online (Sandbox Code Playgroud)

这是什么意思?可能是编译器没有考虑给定一个复制构造函数并使用默认值.如果是这种情况,为什么要调用默认值.简而言之,为什么我们使用&符号会发生什么?如果我们不这样做.

class A
{
public:
    A()
    {

    }



    A(A& tmp)
    {
        id = 2*tmp.id;
    }

public:
    int id;
};


int main()
{
    A obj;
    obj.id = 10;

    A obj1(obj);  
    cout << obj1.id;
}
Run Code Online (Sandbox Code Playgroud)

c++ constructor copy-constructor default-copy-constructor

-1
推荐指数
2
解决办法
1915
查看次数