相关疑难解决方法(0)

什么是复制和交换习语?

这个成语是什么,什么时候应该使用?它解决了哪些问题?当使用C++ 11时,成语是否会改变?

虽然在许多地方已经提到过,但我们没有任何单一的"它是什么"问题和答案,所以在这里.以下是前面提到的地方的部分列表:

c++ c++-faq copy-constructor assignment-operator copy-and-swap

1907
推荐指数
5
解决办法
34万
查看次数

822
推荐指数
10
解决办法
35万
查看次数

508
推荐指数
8
解决办法
5万
查看次数

三阶规则与C++ 11一起成为五次规则?

因此,在观看了关于右值引用的精彩演讲之后,我认为每个类都会受益于这样的"移动构造函数",template<class T> MyClass(T&& other) 编辑,当然还有"移动赋值运算符",template<class T> MyClass& operator=(T&& other)正如Philipp在他的回答中指出的,如果它已经动态分配成员,或通常存储指针.就像你应该有一个copy-ctor,赋值运算符和析构函数,如果之前提到的点适用.思考?

c++ constructor rvalue-reference rule-of-three c++11

325
推荐指数
5
解决办法
7万
查看次数

自动生成默认/复制/移动ctor和复制/移动赋值运算符的条件?

我想在编译器通常自动生成默认构造函数,复制构造函数和赋值运算符的条件下刷新内存.

我记得有一些规则,但我不记得了,也无法在网上找到有信誉的资源.有人可以帮忙吗?

c++ copy-constructor default-constructor move-constructor move-assignment-operator

121
推荐指数
3
解决办法
3万
查看次数

赋值运算符和复制构造函数之间有什么区别?

我不明白C++中赋值构造函数和复制构造函数之间的区别.它是这样的:

class A {
public:
    A() {
        cout << "A::A()" << endl;
    }
};

// The copy constructor
A a = b;

// The assignment constructor
A c;
c = a;

// Is it right?
Run Code Online (Sandbox Code Playgroud)

我想知道如何分配赋值构造函数和复制构造函数的内存?

c++ memory

95
推荐指数
5
解决办法
7万
查看次数

如何在C++中使用基类的构造函数和赋值运算符?

我有一个B包含一组构造函数和赋值运算符的类.

这里是:

class B
{
 public:
  B();
  B(const string& s);
  B(const B& b) { (*this) = b; }
  B& operator=(const B & b);

 private:
  virtual void foo();
  // and other private member variables and functions
};
Run Code Online (Sandbox Code Playgroud)

我想创建一个D只覆盖函数的继承类,foo()不需要进行其他更改.

但是,我希望D拥有相同的构造函数集,包括复制构造函数和赋值运算符B:

D(const D& d) { (*this) = d; }
D& operator=(const D& d);
Run Code Online (Sandbox Code Playgroud)

我是否必须重写所有这些D,或者有没有办法使用B的构造函数和运算符?我特别想避免重写赋值运算符,因为它必须访问所有B的私有成员变量.

c++ inheritance constructor assignment-operator

92
推荐指数
2
解决办法
7万
查看次数

C++构造函数名后的冒号是做什么的?

冒号运算符(":")在这个构造函数中做了什么?它等同于MyClass(m_classID = -1, m_userdata = 0);

class MyClass {
public:

    MyClass() : m_classID(-1), m_userdata(0) { 
    }

    int m_classID;
    void *m_userdata;
};
Run Code Online (Sandbox Code Playgroud)

c++ constructor initialization-list ctor-initializer

85
推荐指数
2
解决办法
5万
查看次数

1D或2D阵列,什么更快?

我需要表示一个2D场(轴x,y),我遇到一个问题:我应该使用一维数组还是二维数组?

我可以想象,重新计算1D数组的索引(y + x*n)可能比使用2D数组(x,y)慢,但我可以想象1D可能在CPU缓存中.

我做了一些谷歌搜索,但只找到关于静态数组的页面(并说明1D和2D基本相同).但我的阵列必须是动态的.

有啥

  1. 快点,
  2. 较小的(RAM)

动态1D阵列还是动态2D阵列?

谢谢 :)

c c++ arrays

60
推荐指数
4
解决办法
4万
查看次数

内置类型的析构函数(int,char等..)

在C++中,以下代码给出了编译器错误:

void destruct1 (int * item)
{
  item->~int();
}
Run Code Online (Sandbox Code Playgroud)

这段代码几乎相同,我只是将int解压缩到另一种类型,并发生了一些神奇的事情:

typedef int myint;

void destruct2 (myint * item)
{
  item->~myint();
}
Run Code Online (Sandbox Code Playgroud)

为什么第二个代码有效?int是否因为已被typedefed而获得析构函数?

如果你想知道为什么一个人想要这样做:这来自重构C++代码.我们正在删除标准堆并将其替换为自制池.这要求我们调用placement-new和析构函数.我知道调用原始类型的析构函数是没用的,但是我们在代码中想要它们,以防我们后来用实际类替换POD.

发现赤裸裸的int不起作用但是类型合适的东西确实令人惊讶.

顺便说一句 - 我有一个涉及模板功能的解决方案.我们只是在模板中输入dede,一切都很好.

c++ constructor destructor typedef

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