草庐IT

field_delete_instance

全部标签

c++ - 智能指针如何在 delete 和 delete[] 之间进行选择?

考虑:deletenewstd::string[2];delete[]newstd::string;每个人都知道第一个是错误的。如果第二个不是错误,我们就不需要两个不同的运算符。现在考虑:std::unique_ptrx(newint[2]);std::unique_ptry(newint);x是否知道使用delete[]而不是delete?背景:当我认为指针的数组类型限定将是一种方便的语言功能时,这个问题浮现在我脑海中。int*[]foo=newint[2];//OKint*bar=newint;//OKdelete[]foo;//OKdeletebar;//OKfoo=newint

c++ - `delete this` 安全吗?

这个问题在这里已经有了答案:Is"deletethis"allowedinC++?(10个回答)关闭5年前.在我最初的基本测试中,这样做是完全安全的。但是,让我感到震惊的是,稍后尝试在delete的this的函数中操作this可能是运行时错误。这是真的吗?deletethis通常安全吗?还是只有某些情况下它是安全的? 最佳答案 deletethis是合法的,并且会执行您所期望的操作:它调用您的类的析构函数并释放底层内存。在deletethis返回后,您的this指针值不会不改变,所以它现在是一个悬空指针,应该不被取消引用。这包括使用

c++ - 获取动态 C 样式数组的大小与使用 delete[]。矛盾?

这个问题在这里已经有了答案:C++doesn'ttellyouthesizeofadynamicarray.Butwhy?(7个回答)关闭3年前。我到处都读到,在C++中,仅从指向该内存块的指针获取动态数组的大小是不可能的。怎么可能没有办法只从指针中获取动态数组的大小,同时又可以通过delete[]释放所有分配的内存>就在指针上,不需要指定数组大小?delete[]一定知道数组的大小吧?因此,此信息必须存在于某处。不应该吗?我的推理有什么问题? 最佳答案 TL;DR运算符delete[]破坏对象并释放内存。销毁需要信息N(“元素数量

c++ - C++ 中的 delete vs NULL vs free

删除指针、将其设置为null和释放它有什么区别。deleteptr;对比ptr=NULL;对比free(ptr); 最佳答案 您的问题表明您来自具有垃圾收集功能的语言。C++没有垃圾回收。如果将指针设置为NULL,这不会导致内存返回可用内存池。如果没有其他指针指向这个内存块,那么您现在只是有一个“孤立”的内存块,它仍然分配但现在无法访问——泄漏。泄漏只会在程序累积到无法分配内存的程度时才会导致程序崩溃。还有相反的情况,你delete使用指针的内存块,然后尝试访问该内存,就好像它仍然被分配一样。这是可能的,因为调用deleteonap

MongoDB 1.6.5 : how to rename field in collection

$rename功能仅在开发版本1.7.2中可用。1.6.5如何重命名字段? 最佳答案 执行此类操作的最简单方法是循环遍历数据集重新映射字段名称。最简单的方法是编写一个执行重写的函数,然后在shell中使用.find().forEach()语法。这是一个来自shell的示例:db.foo.save({a:1,b:2,c:3});db.foo.save({a:4,b:5,c:6});db.foo.save({a:7,b:8});db.foo.find();remap=function(x){if(x.c){db.foo.update({

MongoDB 1.6.5 : how to rename field in collection

$rename功能仅在开发版本1.7.2中可用。1.6.5如何重命名字段? 最佳答案 执行此类操作的最简单方法是循环遍历数据集重新映射字段名称。最简单的方法是编写一个执行重写的函数,然后在shell中使用.find().forEach()语法。这是一个来自shell的示例:db.foo.save({a:1,b:2,c:3});db.foo.save({a:4,b:5,c:6});db.foo.save({a:7,b:8});db.foo.find();remap=function(x){if(x.c){db.foo.update({

c++ - delete[] 是否等于删除?

IP_ADAPTER_INFO*ptr=newIP_ADAPTER_INFO[100];如果我免费使用deleteptr;会不会导致内存泄露,如果不是那为什么?这是VS2005生成的反汇编代码;deleteptr;0041351Dmoveax,dwordptr[ptr]00413520movdwordptr[ebp-0ECh],eax00413526movecx,dwordptr[ebp-0ECh]0041352Cpushecx0041352Dcalloperatordelete(4111DBh)00413532addesp,4;delete[]ptr;00413535moveax,d

c++ - 如何正确替换全局new和delete运算符

首先,至少有4-5个主题与SO上的主题相似。我阅读了它们中的每一个,但我觉得它们并没有真正帮助我解决这个特定问题。如果其他人发现重复的问题,我深表歉意。在发布此之前,我已经完成了我的搜索,因为这似乎是一个非常常见的问题。我在Windows7上使用VisualStudio.NET2003。我有自己的new/delete重载,指向我自己对malloc()和free()的自定义调用以进行诊断。我的新/删除重载在一个头文件中,我已经包含在几个文件中。问题是,代码库几乎是意大利面条,没有简单的方法可以确保所有东西都使用这些重载。第三方库包含黑盒。我们也到处使用STL。在我的测试中,我发现STL仍

c++ - 是否有 GCC 选项警告写入 `this-field` 而不是 `this->field` ?

以下代码(包含一个恶性错误)使用GCC编译时没有任何警告。但是,当然,它不像开发者(我)所期望的那样工作。#includestructA{boolb;voidset(boolb_){this->b=b_;}boolget()const{returnthis-b;}//Thebugishere:'-'insteadof'->'};intmain(){Aa;a.set(true);std::cout我可以为编译器(GCC4.8)添加哪些警告以避免这种错字?链接问题:是否有任何选项可以强制(或警告)使用this->访问成员变量/函数? 最佳答案

pointers - Golang 反射 : Can't set fields of interface wrapping a struct

我正在尝试实现一种方法,该方法可以更改可以具有任意结构的对象中的字段值。当我有指向结构的指针时,字段的遍历没有问题。但是,当我有一个不包含指向结构的指针而是结构本身的接口(interface)时,我无法更改字段,简而言之://Thefollowingdoesn'tworkvarxinterface{}=A{Str:"Hello"}//Thispanics:reflect:callofreflect.Value.FieldonptrValuereflect.ValueOf(&x).Field(0).SetString("Bye")//Thispanics:reflect:callofre