草庐IT

c++ - 堆上的内存地址是否被重用?

标题问题的进一步解释是有序的,让我解释一下我的场景。我有一个指向堆上几个对象的指针的列表容器。每当创建一个新对象时,指向它的指针就会被添加到列表中,而每当删除一个对象时,它的指针就会被删除。可以肯定地说,此列表中的所有指针始终有效。列表中的许多对象都包含指向同一列表中其他对象的指针。在取消引用任何这些指针之前,我想使用CheckAgainstList(ptr*)函数来确保一个对象指向同一列表中的另一个对象,因此不指向到已被删除的对象。现在戴上你的锡纸帽子,这可能吗?对象A有一个指向对象B的指针,其内存地址为0x00988e50。对象B被删除。创建对象C并将其放入新释放的内存空间0x00

c++ - 我可以在父构造函数中多次重用函数的返回值吗?

与这个问题类似,但差异很大,我认为它不是重复的:C++Callingafunctionbeforebase-classinitializationintheinitializationlist我有这个构造函数:EditorGrid::EditorGrid(intwidth,intheight):Grid(width,//workingWidthheight,//workingHeight(SettingsApp::getInstance(0)->iconSize+SettingsApp::getInstance(0)->iconSpace),//pitchWidth(SettingsA

c++ - 模板是否缩短了源代码或二进制文件或两者的大小

我读到模板被编译成不同的实体,这是否意味着二进制大小将与我们使用不同函数编译的相同? 最佳答案 它们应该缩短源代码大小(如果它们被重用)而不是二进制文件大小(模板是为每个不同的实例编译的)。这不同于Java泛型,后者有完整的类型删除(泛型仅作为类型的编译时验证)或C#,其中泛型被编译成特定的二进制文件,可以直接重用而无需重新编译和生成更多代码。 关于c++-模板是否缩短了源代码或二进制文件或两者的大小,我们在StackOverflow上找到一个类似的问题: h

c++ - boost.pool 是如何实现分配内存的重用呢?

背景我的previousquestion关于boost.pool让我详细研究了boost.pool,现在我有一个补充问题来完成我的理解。序曲Thisreference声明以下关于对象池模式:Theobjectpoolpatternisasoftwarecreationaldesignpatternthatusesasetofinitializedobjectskeptreadytouse,ratherthanallocatinganddestroyingthemondemand.据我所知,boost.pool(简化版)通过主要基于element_type大小的内存分配和管理实现对象池模

c++ - 继承只为代码重用c++

我有A类和B类。现在我需要编写一个新的C类,它将使用A和B中的一些字段和方法,但不是全部。(我将使用A和B中大约50%的东西)。现在我正在考虑从A和B继承。但这会使C包含很多没有意义的字段和方法。基本上我只是为了代码重用目的才使用继承,否则我将不得不从A和B复制和粘贴许多行代码。这种做法真的不好吗?有不同的方法吗?谢谢! 最佳答案 继承没有“是a的一半”的概念,所以绝对不是去这里的方式。这听起来像是组合的主要案例。听起来A和B有不止一个“功能”,因为它们各有一半足以组成一个C。我不确定这是否适用于您的情况,但考虑将A分成两部分,A1

c++ - 对象组合促进代码重用。 (T/F,为什么)

我正在备考,正在尝试解决这个问题。具体问题是“Inheritanceandobjectcompositionbothpromotecodereuse.(T/F)”,但我相信我理解问题的继承部分。我相信继承可以促进代码重用,因为相似的方法可以放在抽象基类中,这样相似的方法就不必在多个子类中以相同的方式实现。例如,如果您有三种形状,并且每种形状的方法“getName”只返回一个数据成员“_name”,那么既然可以在抽象基类中实现一次,为什么还要在每个子类中重新实现该方法类“形状”。但是,我对对象组合的最佳理解是对象/类之间的“has-a”关系。例如,一个学生有一个学校,一个学校有很多学生。

c++ - std::vector::assign/std::vector::operator=(const&) 是否保证重用 `this` 中的缓冲区?

如果我将一个vector分配或复制到另一个vector(其容量与前者的大小相同或更大),我可以假设后者的缓冲区将被重用吗?下面的例子证明我可以,但是,标准保证吗?std::vector::assign和std::vector::operator=在这方面的行为有什么不同吗?#include#include#includeintmain(){std::vectora{1,2,3,4,5};std::vectorb{1,2,3,4};std::vectorc{1,2,3,4,5,6,7,8,9,10};std::coutLiveexample.更新:Thisanswer提到voidassi

c++ - 如何在获得 future 值(value)后重用 boost::promise 对象?

voidsss(boost::promise&res){res.set_value("hi");}voidyyy(boost::promise&res){res.set_value("hello");}intmain(){boost::threadth;boost::promisea;th=boost::thread(sss,boost::ref(a));th.join();std::cout我收到promise已经满足的错误。如何复用同一个Promise对象? 最佳答案 用未使用的promise替换它:a=boost::promi

c++ - 在 `delete` 之后重用一个指针

执行以下操作是否安全和/或良好做法?//NewListisamemberfunctionofaclassvoidNewList(intsize){delete[]list;//listisamembervariable;analreadyinitializeddynamicarray.list=newListObject[size];}我基本上放弃了以前的数组,因为我将使用不同的数据存储在类中,因此需要一个新的list来存储关于新数据的其他信息。如果这不是好的做法,还有什么替代方案? 最佳答案 这取决于。每次用new创建一个对象,用

c++ - 结构化绑定(bind)是否可重用?

我正在使用Windows10、VisualStudio2017v15.7.1和/std:c++latest/permissive-这段带有结构化绑定(bind)的简单代码无法编译:auto[a,b]=func1(x,y,z);//autofunc1()->std::tuple[a,b]=func2(x,y,z);//samesignatureasfunc2说此处不允许使用E1277属性。下面的代码也不会编译,同样的错误doublea,b;[a,b]=func1(x,y,z);[a,b]=func2(x,y,z);代码auto[a,b]=func1(x,y,z);auto[a,b]=fu