草庐IT

Objects_Subjectcount

全部标签

c++ - std::list of objects 效率

假设您有某个类的std::list。您可以通过两种方式制作此列表:1)std::listmyClassList;MyClassmyClass;myClassList.push_front(myClass);使用此方法,当您将对象传递给列表时,复制构造函数将被调用。如果该类有很多成员变量,并且您多次进行此调用,它的成本可能会很高。2)std::listmyClassList;MyClass*myClass=newMyClass();myClassList.push_front(myClass);这个方法不会调用类的复制构造函数。我不太确定在这种情况下会发生什么,但我认为该列表将创建一个新

c++ - 数组 : Storing Objects or References

作为一名Java开发人员,我有以下C++问题。如果我有类型A的对象并且我想将它们的集合存储在一个数组中,那么我应该只存储指向对象的指针还是存储对象本身更好?在我看来,存储指针更好,因为:1)通过将对象的指针设置为null,可以很容易地删除对象2)节省空间。 最佳答案 指针还是对象?在C++中不能将引用放在数组中。您可以制作一个指针数组,但我仍然更喜欢容器和实际对象而不是指针,因为:没有机会泄漏,异常安全更容易处理。它并没有减少空间——如果你存储一个指针数组,你需要对象的内存加上指针的内存。我唯一提倡将指针(或智能指针会更好)放入容器

c++ - 为 WaitforMultipleObjects 增加 MAXIMUM_WAIT_OBJECTS

要等待超过MAXIMUM_WAIT_OBJECTS的对象,最简单的方法是什么?MSDN列出了这个:创建一个线程等待MAXIMUM_WAIT_OBJECTS句柄,然后等待该线程和其他句柄。使用此技术将句柄分成MAXIMUM_WAIT_OBJECTS组。调用RegisterWaitForSingleObject等待每个句柄。线程池中的等待线程等待MAXIMUM_WAIT_OBJECTS注册对象,并在对象发出信号或超时间隔到期后分配工作线程。但他们都不是很清楚。这种情况将等待超过一千个线程句柄的数组。 最佳答案 如果您发现自己在等待大量对

BFG Repo-Cleaner 清理在Git历史记录中不需要的数据(git仓库臃肿、git仓库太大、清理git仓库大文件、清理.git\objects\pack中的.pack文件)

文章目录BFGRepo-Cleaner:在Git历史记录中清理不需要的数据BFGRepo-Cleaner是什么?安装BFGRepo-Cleaner在macOS上安装在Ubuntu上安装在Windows上安装1.安装JavaRuntimeEnvironment3.确保计算机上已经安装了git4.下载BFGRepo-Cleaner的jar文件5.运行BFGRepo-Cleaner清理Git历史记录删除大文件清理敏感数据结论BFGRepo-Cleaner:在Git历史记录中清理不需要的数据在处理Git项目时,可能会遇到一些敏感信息或者大文件被误上传到了仓库,这样会导致仓库变得庞大并且难以管理。这种情

c++ - 在 C++ 中 : why does a constructor get called when an array of objects is declared?

MyClassmc2[]={MyClass(),MyClass()};//thiscallstheconstructortwiceMyClassmc1[4];//thiscallstheconstructor4times.Why?所以,我的问题是:为什么没有初始化的对象数组声明会导致调用默认构造函数? 最佳答案 在C++中,大小为4的MyClass数组是四个实际对象。它有点像包含该类型的四个成员的结构,当然您可以使用不同的语法访问这些成员,并且存在其他技术差异。因此,定义该数组导致构建4个对象的原因(并且在大致相同的情况下)与定义该

c++ - 函数参数 : Pointer to array of objects

在我的主要功能中,我创建了一个特定类“菜单”的对象数组当我调用一个函数时,我想提供一个指向该数组的指针。Menumenu[2];//Createmenu[0],[1]Function(POINTER_TO_ARRAY);问题:函数参数的正确写法是什么?我尝试:Function(&menu);在头文件中:voidFunction(Menu*menu[]);//notworkingerror:Cannotconvertparameter1fromMenu(*)[2]toMenu*[]voidFunction(Menu*menu);//notworkingerror:Cannotconver

C++ 后递增 : objects vs primitive types

我们不能对右值使用预增量:inti=0;intj=++i++;//Compileerror:lvaluerequired如果我们定义一个类:classA{public:A&operator++(){return*this;}Aoperator++(int){Atemp(*this);returntemp;}};然后我们可以编译:Ai;Aj=++i++;A对象和int数据类型有什么区别j=++i++;用A编译而不用int编译? 最佳答案 发生这种情况是因为当重载运算符被定义为成员函数时,它们遵循一些与调用成员函数更相关的语义,而不是内

c++ - 虚拟功能 : Iterating over a vector<Base Class> that is populated with subclass objects

简短描述:我正在迭代一个vector,在vector中的每个对象上调用一个虚函数,以执行一系列操作。vector和迭代器一样属于基类。所有的对象都是child。当调用虚函数时,它会执行基类的函数。(真的)长描述:我正在尝试为具有一组行为的生物建模。我的基类是抽象的,只有两个函数(虚拟),所有子类都已覆盖:classBehavior{public:Behavior();~Behavior(void){}virtualvoidexecute(){}virtualBEHAVIOR_TYPEgetType(){returnm_Type;}protected:BEHAVIOR_TYPEm_Typ

c++ - 右值引用 : what exactly are "temporary" objects, 它们的范围是什么,它们存储在哪里?

rvaluereferences:whatexactlyare"temporary"objects,whatistheirscope,andwherearetheystored?阅读一些文章,右值总是被定义为“临时”对象,如Animal(),其中Animal是一个类,或者一些文字,例如10。但是,右值/“临时”对象的正式定义是什么?newAnimal()是否也被认为是“临时”对象?或者它只是堆栈上的值,例如Animal()和存储在代码中的文字?此外,这些“临时”对象存储在哪里,它们的作用域是什么,以及对这些值的右值引用的有效期有多长? 最佳答案

C++11/VS2010 : Returning containers of uncopyable but movable objects

考虑以下代码:#include#includestructA:privateboost::noncopyable{A(intnum,conststd::string&name):num(num),name(name){}A(A&&other):num(other.num),name(std::move(other.name)){}intnum;std::stringname;};std::vectorgetVec(){std::vectorvec;vec.emplace_back(A(3,"foo"));//vec.emplace_back(3,"foo");notavailabley