草庐IT

new_time

全部标签

c++ - operator new[] 和非 POD 类型

我正在尝试重载operatornew以跟踪内存分配(用于调试)。我在分配非POD类型的数组时遇到了问题(例如,持有std::string的类的数组)。似乎调用了operatornew来为数组分配内存+用于存储数组长度的8个字节(可能是这样编译器可以在数组时调用正确数量的析构函数被摧毁)。operatornew[]如何确定实际数据将放置在返回地址(POD数组)还是返回地址+8处?(我需要这个以便我可以在结构中搜索指针) 最佳答案 我认为它会以与new[]知道要调用的构造函数相同的方式进行操作:编译器告诉它。编译器会跟踪数据类型并知道它

c++ - 在构造函数初始化列表中使用 placement new 的语法是什么

假设我有一个类classMyClassintbuf[10];public:MyClass(inti){new(&buf)OtherClass(i);//Howtomovethistoconstructorinitializelist?}只需将该行复制到之后的位置:不起作用。 最佳答案 我不确定您将如何使用构造的对象;我想MyClass有一个指向对象的数据成员指针,然后像这样初始化指针:classMyClass{intbuf[10];OtherClass*p;public:MyClass(inti):p(new(&buf)OtherC

c++ - 是否将 std::time 与 std::srand 有效代码一起使用?

在C++中这样写是合法的:std::srand(std::time(nullptr));或者这会产生未定义的行为吗?std::time返回std::time_t这是一种算术类型,但除此之外未指定。据我理解,算术类型是float、整数和字符类型中的任何一种。std::srand将unsignedint作为种子值。因此,我认为您不能严格执行此转换。我读到在符合POSIX的系统上,std::time_t是整数,是自00:00,1970年1月1日UTC以来的秒数。在这种情况下,转换可能需要从有符号转换为无符号,这是实现定义的转换,但应该没问题,并且从较大的整数类型转换为较小的整数类型,这对种子

c++ - 这个 new() 语句的解释

我正在审查一段C++代码,我遇到了这个语句block:staticvoidVector3DefaultConstructor(Vector3*self){new(self)Vector3();}我以前没有遇到过以这种方式使用的新运算符。有人可以解释为什么以这种方式调用new吗? 最佳答案 这称为“放置新”。默认情况下,它不分配内存,而是在给定位置(此处为self)构造对象。但是,它可以为一个类重载。参见FAQ了解更多信息。销毁使用放置new构造的对象的正确方法是直接调用析构函数:obj->~Vector3();

深入解析JavaScript中构造函数和new操作符

🧑‍🎓个人主页:《爱蹦跶的大A阿》🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》​ ​目录✨前言✨正文第一节:构造函数第二节:new操作符第三节:实例与原型✨结语 ✨前言        JavaScript中的构造函数是一种特殊的函数,用于生成对象。它们通常以大写字母开头,可以通过new操作符来调用。        new操作符在调用构造函数时会进行以下操作:创建一个空的JavaScript对象将这个空对象的__proto__属性链接到构造函数的prototype属性,从而使这个空对象继承构造函数的prototype属性中的方法和属性将构造函数内部的th

c++ - C++ 'new' 运算符是如何实现的

ClassB;B*b=newB();//defaultconstructorB*b1=newB(10);//constructorwhichtakesanargumentB(intx)但是,如果我们想写一个自定义版本的new,语法是ClassB{/*...*/staticvoid*operatornew(size_tsize);}语句newB()是如何转换为函数调用的运算符new(sizeof(B))?它如何跟踪调用哪个构造函数,即它如何区分newB()和newB(intx)?new是作为C++中的宏实现的吗? 最佳答案 你的问题应

C++ "new T[size]"不起作用?

我有一个模板类定义为:#include#includeusingnamespacestd;templateclasstbufferpool{private:constintm_initial;constintm_size;constintm_total;T*m_buffer;vectorm_queue;public://constructortbufferpool(intinitial,intsize):m_initial(initial),m_size(size),m_total(initial*size){m_buffer=newT[m_total];T*next_buffer=m

c++ - boost::posix_time::microsec_clock CPU 密集吗?

我想使用Boost获取毫秒精度的时间。(精度不需要毫秒,接近即可。)引用Localtimewithmilliseconds,等,说明应该使用微秒时钟:boost::posix_time::microsec_clock::local_time();根据我的经验,使用标准的、低影响的系统调用(即Windows上的::GetTicks())不可能获得精确到微秒的时间(假设具有类似的精度)).相反,需要发出CPU密集型调用以boost超过毫秒(进入微秒)的精度。正如我提到的,我不需要微秒级的精度-只需稍微接近毫秒级的精度即可。然而,Boost.Date_Time不提供任何“millisec_c

fatal: unable to access ‘https://github.com/Mrrrrr.git/‘: Failed to connect to github.com Time out

解决fatal:unabletoaccess‘https://github.com/Mr.git/’:Failedtoconnecttogithub.comport443after21046ms:Timedout的问题问题:准备向github上push写的项目代码时,一直出现这个错误,无法push。原因:连接不到github的网站目录解决fatal:unabletoaccess'https://github.com/Mr.git/':Failedtoconnecttogithub.comport443after21046ms:Timedout的问题1.因为代理的问题,请看这里2.ping不到i

c++ - 将 operator new 和 operator delete 与自定义内存池/分配器一起使用

我正在研究一个内存池/内存分配器实现,我正在一个庄园中设置它,只有一个特殊的“客户端”对象类型可以从池中提取。客户端可以直接构建到池中,或者它可以使用池进行动态内存调用,或者理论上它可以同时进行。我希望能够以调用我的池“alloc()”和“free()”函数的方式重载operatornew和operatordelete,以便获取构建对象所需的内存。我遇到的主要问题之一是让我的运算符(operator)删除以便能够通过调用我编写的pool->free()函数来释放内存。我想出了一个hack,通过将池传递到构造函数并让析构函数执行释放工作来修复它。这一切都很好而且花花公子,直到有人需要从这