这个成语是什么,什么时候应该使用?它解决了哪些问题?当使用C++ 11时,成语是否会改变?
虽然在许多地方已经提到过,但我们没有任何单一的"它是什么"问题和答案,所以在这里.以下是前面提到的地方的部分列表:
c++ c++-faq copy-constructor assignment-operator copy-and-swap
C和C++中未定义,未指定和实现定义的行为有什么区别?
c c++ undefined-behavior unspecified-behavior implementation-defined-behavior
因此,在观看了关于右值引用的精彩演讲之后,我认为每个类都会受益于这样的"移动构造函数",template<class T> MyClass(T&& other) 编辑,当然还有"移动赋值运算符",template<class T> MyClass& operator=(T&& other)正如Philipp在他的回答中指出的,如果它已经动态分配成员,或通常存储指针.就像你应该有一个copy-ctor,赋值运算符和析构函数,如果之前提到的点适用.思考?
我想在编译器通常自动生成默认构造函数,复制构造函数和赋值运算符的条件下刷新内存.
我记得有一些规则,但我不记得了,也无法在网上找到有信誉的资源.有人可以帮忙吗?
c++ copy-constructor default-constructor move-constructor move-assignment-operator
我不明白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)
我想知道如何分配赋值构造函数和复制构造函数的内存?
我有一个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的私有成员变量.
冒号运算符(":")在这个构造函数中做了什么?它等同于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) 我需要表示一个2D场(轴x,y),我遇到一个问题:我应该使用一维数组还是二维数组?
我可以想象,重新计算1D数组的索引(y + x*n)可能比使用2D数组(x,y)慢,但我可以想象1D可能在CPU缓存中.
我做了一些谷歌搜索,但只找到关于静态数组的页面(并说明1D和2D基本相同).但我的阵列必须是动态的.
有啥
动态1D阵列还是动态2D阵列?
谢谢 :)
在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++ ×9
constructor ×4
c ×3
c++-faq ×2
arrays ×1
c++11 ×1
declaration ×1
definition ×1
destructor ×1
implementation-defined-behavior ×1
inheritance ×1
memory ×1
terminology ×1
typedef ×1