一.new用法
1.new(p + i) T();
这不是普通new,这是定位new
2.plain new
3.nothrow new
4.placement new
https://www.jb51.net/article/41524.htm
5.
int *p=new int; //不进行初始化
int *p=new int(); //初始化为0
int *p=new int(4); //初始化为4
int *p=new int[];//初始化一个数组
二
使用realloc的方式申请内存扩展空间,而不是使用常规的malloc的方式申请内存,这样在很多情况扩展时都不用拷贝数据,大幅度提升了性能
1.智能指针直接加括号
threads_.push_back(std::unique_ptr<EventLoopThread>(t));
EventLoopThread *t = new EventLoopThread(cb, buf);
//这里的(t)应该是unique_ptr重载了()运算符 //err
//也可能是个匿名对象,但是t在前面已经定义了,看不懂 //ok
EventLoopThread *t = new EventLoopThread(cb, buf);
std::unique_ptr<EventLoopThread> hoke(t);
threads_.push_back(hoke);
threads_.push_back(std::unique_ptr<EventLoopThread>(t));
EventLoopThread *t = new EventLoopThread(cb, buf);
//可能是这样的,简化了一段代码,std::unique_ptr<EventLoopThread>(t)作为的是函数参数,提供一个匿名对象
2.new直接加括号
Person *ptr01(new Person);
Person *ptr02 = new Person;
Person *ptr03{new Person};
这应该是单纯的new语法里重载了()运算符
//不是,上面的理解有误,这里不做解释
3.构造函数对象直接加括号
#include <iostream>
#include <string>
using namespace std;
template<class T>
class Myptr
{
public:
Myptr(T* ptr_)
:ptr(ptr_)
{}
Myptr(){}
~Myptr(){}
private:
T *ptr;
};
int main()
{
Myptr<int> ptr(new int);
return 0;
}
这里的new int返回的是一个指针,这个指针作为构造函数的参数
4.类名直接加括号
占坑,认为是匿名对象
//是的,类名和对象名加括号是不一样的,
类名加括号就是匿名对象,而对象名加括号就是调用运算符重载
5.vector的括号
return std::vector<EventLoop*>(1, baseLoop_);
我认为这里是一个匿名对象,因为做函数的返回值直接传一个匿名对象就OK了
//是的,不做赘述