草庐IT

new_elem

全部标签

c++ - 在泛型编程中使用 placement new

在泛型代码中使用placementnew在指定地址构造对象时,使用模式与通常的代码有点不同。例如,考虑uninitialized_copy的实现:([uninitialized.copy])templateForuninitialized_copy(Itfirst,Itlast,Fordest){usingT=typenamestd::iterator_traits::value_type;for(;first!=last;++first,(void)++dest)::new(static_cast(std::addressof(*dest)))T(*first);}这篇文章从标准的角

c++ - C++ 中 placement new 执行的完整操作列表是什么?

在thisquestion讨论了在编译器不支持new和放置new时创建工厂方法。显然,如果通过放置new完成的所有必要步骤都以某种方式重现,则可以使用malloc()制作一些合适的解决方案。放置新有什么作用-我将尝试列出并希望不要遗漏任何内容-除了以下内容?递归调用所有基类的构造函数为所有成员变量调用构造函数和初始值设定项(如果有的话)相应地设置vtable指针。还有哪些Action? 最佳答案 Placementnew除了分配内存之外,它做了常规new会做的所有事情。我认为您基本上已经确定了发生的事情,并做了一些小的说明:显然类本

c++ - 我应该使用 shared_ptr<Object> myObject = (shared_ptr<Object>) new Object() 来访问私有(private)构造函数吗?

我正在使用广泛使用以下语法的代码库:shared_ptrmyObject=(shared_ptr)newObject();我注意到我无法使用make_shared访问私有(private)构造函数,但是shared_ptrmyObject=(shared_ptr)newObject();工作得很好。我应该仅仅因为它看起来有效而使用它吗?有什么危险吗?它与make_shared有何不同??我知道this中的答案问题,它在make_shared之间进行比较和:std::shared_ptrp2(newObject("foo"));但我没能找到对我遇到的语法的引用。和上面有什么不同,还是一样

c++ - 为什么添加两个 std::vector 比从 new[] 中添加原始数组慢?

我正在查看OpenMP,部分原因是我的程序需要添加非常大的vector(数百万个元素)。但是,如果我使用std::vector或原始数组,我会看到很大的不同。我无法解释。我坚持认为区别仅在于循环,当然不是初始化。我所指的时间差异,只是计算加法的时间,特别是没有考虑vector、数组等之间的任何初始化差异。我实际上只谈论求和部分。vector的大小在编译时是未知的。我在Ubuntu16.04上使用g++5.x。编辑:我测试了@Shadow所说的内容,这让我开始思考,优化有什么进展吗?如果我使用-O2进行编译,那么,使用初始化的原始数组,我返回以使用线程数进行循环缩放。但是使用-O3或-f

c++ - 关于 malloc 和 new 在各自处理内存分配的机制方面的区别?

这个问题在这里已经有了答案:Whatisthedifferencebetweennew/deleteandmalloc/free?(15个答案)关闭7年前。malloc和new在处理内存分配的机制方面有什么区别?

c++ - CreateProcess( ) 不创建带有 CREATE_NEW_CONSOLE 标志的新窗口 - C/C++

当然,我一直在尝试使用WindowsAPI使用CreateProcess()创建进程。由于某种原因,即使在搜索网络之后,我也无法创建新的控制台。我做过的研究:我使用MSDN示例代码作为我应该在函数中使用的参数的基础:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682512%28v=vs.85%29.aspx我阅读了以下MSDN文章,了解有关如何创建新控制台窗口的信息:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682528%28v=vs.85%

c++ - 在构造函数的成员初始值设定项列表中使用 new

这个问题在这里已经有了答案:Arethereanyissueswithallocatingmemorywithinconstructorinitializationlists?(7个答案)关闭8年前。这可以编译,但我从未在任何其他代码中看到它。安全吗?Testclass():sources(newint[32]){}代替:Testclass(){sources=newint[32];}

C++ - 重载 operator new 并提供额外的参数

我知道您可以重载运算符new。当您这样做时,默认情况下您的方法会收到一个size_t参数。但是,是否可以将size_t参数以及用户提供的其他参数发送到重载的new运算符方法?例如inta=5;Monkey*monk=newMonkey(a);因为我想像这样覆盖新的操作符void*Monkey::operatornew(size_tsize,inta){...}谢谢编辑:这是我想要完成的:我在应用程序开始时分配了一大块虚拟内存(内存池)。继承我的基类的所有对象都将继承其重载的new运算符。我有时想在重载的new中传递一个参数的原因是告诉我的内存管理器我是否想使用内存池,或者我是否想用ma

c++ - 运算符 new[] 不接收额外的字节

我有这样的代码#includeclassFoo{intm_data;public:Foo():m_data(0){}/*~Foo(){}*/staticvoid*operatornew[](constsize_tsize){returnmalloc(size);}staticvoidoperatordelete[](void*data){free(data);}};intmain(){Foo*objects=newFoo[5];delete[]objects;}在这种情况下,我在operatornew重载中收到了我想要的20个字节的size值(sizeof(int)*5)。但是如果我取

java - C++中new运算符和java中new运算符的区别

据我所知,new运算符做了以下事情:(如果我错了,请纠正我。)分配内存,然后返回第一个block的引用分配的内存。(显然,内存是从堆中分配的。)初始化对象(调用构造函数)运算符new[]也以类似的方式工作,只是它对数组中的每个元素都这样做。谁能告诉我这些运算符在C++和Java中有何不同:就其生命周期而言。如果他们无法分配内存怎么办。 最佳答案 在C++中,T*p=newT;...为T类型的对象分配足够的内存,在该内存中构造一个T类型的对象,可能对其进行初始化,并且返回指向对象的指针。(指针与标准new的分配内存地址具有相同的值,但