草庐IT

new_time

全部标签

使用 "new"的 C++ 动态内存分配

我是C++的新手,正在尝试自学(我有Java背景)。有动态内存分配的概念,我可以使用new分配给一个数组(例如)。在C(以及C++)中,我有malloc和realloc正在执行此操作。在C++中,出于某种我无法理解的原因,他们添加了new。我已经阅读了很多有关进入堆栈的普通数组与进入堆的动态分配数组之间的区别的文章。所以我的理解是,通过使用new我在堆中分配空间,当完成一个函数时不会自动删除,但会保留在原处直到我最后,手动释放它。我找不到在普通内存上使用动态内存分配的实际例子。据说我在使用普通数组时无法通过运行时分配内存。好吧,可能我没有理解正确,因为当我尝试创建一个普通数组(没有ne

c++ - 为什么 new 关键字返回指针而不是引用?

我知道new关键字返回指针,所以返回类型是void*。我的愚蠢问题是,为什么new必须返回void*而不是void&?意思是当对象由new创建时,他们可以使用&运算符的地址返回该对象的地址。我知道指针和引用之间的区别。但最后我们使用指针而不是引用。请消除我的困惑谢谢。 最佳答案 New返回一个你用来在内存中分配空间的任何类型的指针,而不是void*autop1=newint[5];//returnsapointertoanintpointingtothe1stelementautop2=newshort[5];//returnsap

c++ - "All memory allocated on the stack is known at compile time"是什么意思?

阅读thisgreattutorial关于堆栈与堆,我对这句话有疑问:在堆栈上分配的所有内存在编译时都是已知的。我的意思是,如果我处于取决于用户输入的for循环中(i从0到X),并且在for我在堆栈上分配内存(例如创建一些类的新实例并放入类容器中),它不知道编译程序时堆栈将如何增长(它错过了用户的输入)。我是不是误会了什么? 最佳答案 对读者来说,所做的陈述稍微简化了一点。你是对的,堆栈本质上是动态的,实际分配的数量可能因动态输入而异。这是一个带有递归函数的简单示例:voidf(intn){intx=n*10;if(x==0)ret

c++ - malloc 和 new 的实现差异。堆栈实现?

分配内存时,如果内存不可用,new运算符会抛出异常。另一方面,malloc返回NULL。执行差异的原因是什么。另外,在静态内存分配上,即在堆栈上,如果我们用完内存是否会出现异常?我已经浏览过链接Whatisthedifferencebetweennew/deleteandmalloc/free?但是没有得到我关于两者实现上的区别的答案 最佳答案 C代码的问题在于您应该检查函数的返回值以确保它们正常工作。但是编写的很多代码都没有检查返回值,结果在您最意想不到的时候炸毁了。在最坏的情况下,它甚至不会立即崩溃,而是继续在错误下游数英里的某

【论文阅读笔记】TimesURL: Self-supervised Contrastive Learning for Universal Time Series

TimesURL:Self-supervisedContrastiveLearningforUniversalTimeSeriesRepresentationLearning摘要 学习适用于多种下游任务的通用时间序列表示,并指出这在实际应用中具有挑战性但也是有价值的。最近,研究人员尝试借鉴自监督对比学习(SSCL)在计算机视觉(CV)和自然语言处理(NLP)中的成功经验,以解决时间序列表示的问题。然而,由于时间序列具有特殊的时间特性,仅仅依赖于来自其他领域的经验指导可能对时间序列是无效的,并且难以适应多个下游任务。 在1和2中,研究发现不适当的正负样本构造可能引入不恰当的归纳偏差,既不能保持时

c++ - 我是否需要删除使用 new 和 placement 构造的对象

classFoo{//somememberpublic:intbar;}intmain(){char*buffer=newchar[100];Foo*f=new(buffer)Foo();//doihavetodeletef;//orisdelete[]buffer;//enough}当然,如果删除Foo对系统有一些重大影响,我必须删除它,但可以说它是一个简单的存储对象,我将其完全放在缓冲区内并且没有确实删除了一些其他东西的析构函数。我是否必须删除一个放置在新内部的对象是否足以删除缓冲区?如果我必须对缓冲区内的每个对象调用delete,为什么我必须这样做吗?我读到:what-uses-

c++ - 将 long int 转换为 const time_t

我有变量tmit:longtmit;。我在这段代码中出错:printf("Time:%s",ctime(&tmit));错误说:无法将参数“1”的“longint*”转换为“consttime_t*{akaconstlonglongint*}”到“char*ctime(consttime_t*)”我的问题是,如果我想查看日期,如何在不丢失任何有关时间的信息的情况下将long转换为time_t或如何更改此代码。我正在研究这个answer,但我得到了错误。 最佳答案 一般情况下,您不能这样做,因为std::time_t之间不需要有任何合

c++ - 使用 new 运算符定义 std::shared_ptr 时出错

我正在尝试通过以下方式使用new运算符定义std::shared_ptr:#includestructA{};intmain(){std::shared_ptrptr=newA();return0;}但我得到了以下编译时错误:main.cpp:Infunction'intmain()':main.cpp:8:30:error:conversionfrom'A*'tonon-scalartype'std::shared_ptr'requestedstd::shared_ptrptr=newA();无论如何,以下绝对有效:std::shared_ptrptr{newA()};有谁知道为什么

c++ - 从编译时已知的日历日期创建 `std::chrono::time_point`

This答案显示了如何将字符串解析为std::chrono::time_point,如下所示:std::tmtm={};std::stringstreamss("Jan9201412:35:34");ss>>std::get_time(&tm,"%b%d%Y%H:%M:%S");autotp=std::chrono::system_clock::from_time_t(std::mktime(&tm));如果我想从一个(公历)日历日期创建一个std::chrono::time_point,其年、月和日在编译时已知,是否有任何比上面建议的从字符串解析它更简单的方法?

c++ - 在 C++ 中重载 new、delete

我遇到这一行是stroustrup运算符函数必须是成员或至少采用一个用户定义类型的参数(重新定义new和delete运算符的函数不需要)。operatornew和operatordelete不是将用户定义的类型作为它们的参数之一吗?这是什么意思,我在这里遗漏了什么吗 最佳答案 Stroustrup的引述显然适用于运算符重载。C++语言仅支持用户定义类型的运算符重载。这意味着重载函数(operator)必须是用户定义类型的成员,或者是具有至少一个用户定义类型参数的独立函数。这正是相关引述的意思。但独立(非成员(member))oper