知识点:
1,prefix:increment and fetch postfix:fetch and increment
2,前值和后置的标准写法,见代码(返回值!!!)
3,new分为两步 一,调用operator new分配空间 二,调用pleasement new构造对象。operator new要用operator delete释放
#include <iostream>
#include <cstdio>
using namespace std;
class A {
public:
A(int a = 1): _a(a) {
}
A& operator++() {
++_a;
return (*this);
}
const A operator++(int) {
A re(*this);
++(*this);
return re;
}
void show() const {
cout << _a << endl;
}
~A() {
cout << "dstr" << endl;
}
private:
int _a;
};
int main(int argc, char* argv[]) {
A a(10);
++++a;
//a++++; 返回值const不能在++,运算符重载要遵循内置类型运算符行为
a.show();
A * p = new A[10];
void *rawMemory = operator new( 10 * sizeof(A) );
for(int i = 0; i < 10; ++i) {
new( static_cast<A*>(rawMemory)+i ) A(10);
(*(static_cast<A*>(rawMemory) + i)).show();
}
for(int i = 0; i < 10; ++i) {
(*(static_cast<A*>(rawMemory) + i)).~A();
}
operator delete(rawMemory);
delete[] p;
return 0;
}