关于C++的括号问题和new和realloc的用法

 一.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了

//是的,不做赘述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值