jjzjj

delete_article

全部标签

c++ - 为什么 delete 运算符可以用在 const 上下文中?

这个问题不同于:Isadestructorconsideredaconstfunction?new-expressionanddelete-expressiononconstreferenceandconstpointerDeletingapointertoconst(Tconst*)我写了一个这样的类Test。classTest{private:int*p;public://constructorTest(inti){p=newint(i);}Test&operator=(constTest&rhs){deletep;p=newint(*(rhs.p));return*this;}}

c++ - new 和 delete 处理多线程问题

我正在看书EfficientC++:PerformanceProgrammingTechniques作者对全局新的和删除的运营商说了以下内容:Theymanagememoryintheprocesscontext,andsinceaprocessmayspawnmultiplethreads,new()anddelete()mustbeabletooperateinamultithreadedenvironment.Inaddition,thesizeofmemoryrequestsmayvaryfromonerequesttothenext.第6章单线程内存池。这是真的吗?我认为C+

C++ delete 不释放所有内存 (Windows)

我需要帮助了解我在Windows上的内存分配和释放问题。我目前正在使用VS11编译器(VS2012IDE)和最新更新(Update3RC)。问题是:我正在为二维数组动态分配一些内存并立即释放它。尽管如此,在内存分配之前,我的进程内存使用量在分配之前是0,3MB,在分配时是259,6MB(预计因为分配了32768个64位整数(8字节)数组),在分配期间是4106,8MB,但在释放内存后,内存并没有下降到预期的0.3MB,而是停留在12.7MB。由于我正在释放我占用的所有堆内存,因此我预计内存会恢复到0.3MB。这是我正在使用的C++代码:#include#defineSIZE32768i

c++ - delete 如何区分内置数据类型和用户定义的数据类型?

如果我这样做://(1.)int*p=newint;//...dosomethingdeletep;//(2.)classsample{public:sample(){}~sample(){}};sample*pObj=newsample;//...dosomethingdeletepObj;那C++编译器怎么知道delete后面的对象是内置数据类型还是类对象呢?我的另一个问题是,如果我new一个指向int数组的指针,然后我delete[]那么如何编译器知道要取消分配的内存块的大小吗? 最佳答案 编译器知道指向对象的类型,因为它知道

c++ - 在动态分配的对象上调用 delete 是否总是内存泄漏?

从讨论开始here,我想知道下面的代码是否有内存泄漏:intmain(){newint();//orint*x=newint();return0;}我知道内存被操作系统回收了,但它还是泄漏了吗?我相信是的。什么定义了内存泄漏?我只能在标准中找到一份引用资料,而且帮助不大。编辑:我不想开始辩论——“我认为……”不是我要找的那种答案。我最感兴趣的是资源-哪些C++书籍或网站或任何关于它的内容。 最佳答案 这取决于你如何定义“泄漏”。根据最明显的定义,唯一有用的,它不是泄漏,至少在应用层。水桶不漏是因为你有意让有限数量的水逸出。实际上,应

c++ - 何时使用 =default 与 =delete

据我了解,这些语义仅用于复制构造函数、移动构造函数、复制赋值、移动赋值和析构函数。使用=delete用于禁止使用其中一项功能,即=default如果您想向编译器明确说明在何处使用这些函数的默认值,则使用它。在制作类(class)时使用这些关键字的最佳做法是什么?或者更确切地说,在开发类(class)时我如何记住这些?例如,如果我不知道我是否会使用这些功能之一,最好用delete禁止它。或允许并使用default? 最佳答案 好问题。同样重要的是:哪里使用=default和=delete.我对此有一些有争议的建议。它与我们所有人(包括

C++初阶:C/C++内存管理、new与delete详解

之前结束了类与对象:今天进行下面部分内容的学习文章目录1.C/C++内存分布2.C语言中动态内存管理方式:malloc/calloc/realloc/free3.C++动态内存管理方式3.1new/delete操作内置类型3.2new和delete操作自定义类型4.operatornew与operatordelete函数5.new和delete的实现原理5.1内置类型5.2自定义类型6.定位new表达式(placement-new)7.知识点梳理malloc/free和new/delete的区别1.C/C++内存分布具体说明:栈又叫堆栈–非静态局部变量/函数参数/返回值等等,栈是向下增长的。栈

c++ - C++中的delete和调用析构函数有什么区别

如标题所述,这是我的代码:classFoo{public:Foo(intcharSize){str=newchar[charSize];}~Foo(){delete[]str;}private:char*str;};对于这门课,两者之间的区别是什么:intmain(){Foo*foo=newFoo(10);deletefoo;return0;}和intmain(){Foo*foo=newFoo(10);foo->~Foo();return0;} 最佳答案 调用析构函数会释放对象拥有的资源,但不会释放分配给对象本身的内存。第二个代码片

c++ - 错误 C2280 : attempting to reference a deleted function (atomic<int>)

我有一个classA带有成员变量_atomicVar类型std::atomic.#includeclassA{public:A();~A();private:std::atomic_atomicVar;};如果我构建项目,我会收到以下错误:errorC2280:'std::atomic::atomic(conststd::atomic&)':attemptingtoreferenceadeletedfunction我主要是一名C#开发人员,所以我还不了解C++的每个细节(还)。我不知道我在哪里使用atomic的复制代码.我还尝试初始化_atomicVar:std::atomic_ato

c++ - 我如何在共享内存中使用运算符 `new` 和 `delete`?

我想使用共享内存在多​​个程序之间共享一些对象。我在thissite找到了示例.它没有任何对象分配,只是直接寻址,但我想在共享内存中创建结构或类。 最佳答案 因为内存已经分配好,你想使用placementnew:void*ptr=shmat(shmid,0,0);//HandleerrorsMyClass*x=new(ptr)MyClass;然后,MyClass的新实例将在ptr指向的内存中构造。当不需要该对象时,您必须手动调用析构函数(不释放内存)。ptr->MyClass::~MyClass();