我刚开始学习封装,我偶然发现std::string使用的两个函数似乎破坏了它的封装。关于http://www.cplusplus.com/reference/string/string/c_str/中的c_str()和data()和http://www.cplusplus.com/reference/string/string/data/“返回的指针指向字符串对象当前使用的内部数组,用于存储符合其值的字符”。对于刚刚学习OO编程的人来说,打破封装是个好主意吗?对于更高级的人呢?顺便说一句,这似乎是与C++98不同的行为。为什么您认为他们做出了这些改变?感谢您的宝贵时间。
我在想用模板定义异常是个好主意。定义不同类型的异常是一项super冗长的任务。你必须继承异常,没有任何改变,只是继承。像这样..classFooException:publicBaseException{public:...};classBarException:publicBaseException{public:...};...那是一场噩梦,不是吗?所以我正在考虑用模板定义不同的异常/**@briefExceptionofradio**/classException:publicruntime_error{private:///Nameoffilethatthrowconststr
例如:boost::shared_ptrtest(){boost::shared_ptrx(newint(3));returnx;}voidfunction(){inty=*test();...}使用shared_ptr来避免复制整个对象也是一个坏主意吗?例如矩阵/图像的vector。 最佳答案 在一般情况下,不会。您的示例复制了shared_ptr的内容,然后删除了原始值。现在,这里更大的问题是为int进行动态内存分配效率极低,但我假设您没有在实际代码中这样做。:) 关于C++:直接使
所以,我觉得这是个坏主意:classFoo{public:Foo(constFoo&from){memcpy(this,&from,sizeof(Foo));m_someData=newint[m_dataLength];memcpy(m_someData,from.m_someData,m_dataLength*sizeof(int));}private:int*m_someData;intm_dataLength;};问题是:为什么?如果memcpy参数类型(和大小)相同,布局相同,哪里不好?我看到的一个潜在问题是是否存在string或vector字段,但我不确定这是否是一个有效的
我实际上正在制作一个简单的C++SFML游戏,我想学习更多关于C++编程的知识。现在我正在使用shared_ptr来管理资源。创建新资源时,我对shared_ptrs有一些疑问,例如:shared_ptrresource(newResource(World::LEVEL));根据boostshared_ptr(Y*p)throwsbad_alloc。我不知道std::tr1是否也这样做。而且我不知道我是否应该担心将shared_ptr放入try/catchblock中以检查是否抛出bad_alloc。这是一个好的编程习惯吗? 最佳答案
我是C++的初级程序员,我还在学习基础,但我有一个关于C++中的标准库和STL的简单问题,我认为这不是来自语言的核心,我的意思是这个库只是使编程和可移植性更容易,这意味着如果我学习并掌握了C++规则,我可以构建自己的规则,我的意思是通常通过练习获得这种调用体验。示例:cout是标准输出函数,但是如果我想为Windows编写一个GUI软件,我永远不会只看它!!我的问题:这是真的吗?如果不是,为什么? 最佳答案 如果不熟悉标准库,就不能真正称得上是C++程序员。自己编写是一个非常糟糕的主意。我强烈建议您获取NicolaiJosuttis
我一直在研究一堆图像处理程序..没什么特别的,主要是快速而肮脏的实验。图像数据存储在堆栈上声明的vector中(当我不需要传递数据时,我尽量避免使用指针)。我注意到尽管进行了无数次调试和单步执行,但我的某些函数的行为一直很奇怪。有时调试器会给我一个错误,它无法评估某个变量等等。事情通常是没有意义的,过去的经验告诉我,当这种情况发生时,这意味着发生了某种溢出或内存损坏。第一个想到的是,这可能是因为我将大量图像数据存储到vector中。但是,我的印象是vector将它们的实际数据存储在堆中,因此我认为在堆栈中放置一些这样的大vector不会有什么坏处。我这样想错了吗?我应该分配我的vect
我正在编写一个为用户生成格式化文件的程序,但它不仅生成格式化文件,它还做了更多。我想向最终用户分发一个二进制文件,当用户运行该程序时,它会为用户生成具有适当数据的xml文件。为了实现这一点,我想将文件内容提供给一个用代码编译的char数组变量。当用户运行程序时,我会把char文件写出来,为用户生成一个xml文件。char*buffers="axmlformatfilecontents,\thisrepresentmanyblocktext\fromafile,...";我有两个问题。Q1。对于如何将我的文件内容编译成二进制文件,即作为一个二进制文件分发,您有任何其他想法吗?Q2。如上所
这是一个我从未真正理解过的内存分配问题。voidunleashMonkeyFish(){MonkeyFish*monkey_fish=newMonkeyFish();std::stringlocalname="Wanda";monkey_fish->setName(localname);monkey_fish->go();}在上面的代码中,我在堆上创建了一个MonkeyFish对象,为其分配了一个名称,然后将其释放到世界上。假设已分配内存的所有权已转移到MonkeyFish对象本身-只有MonkeyFish本身会决定何时死亡和删除自己。现在,当我在MonkeyFish类中定义“name
我正在编写一个唯一ID生成器,它具有不同的策略来生成在一天、一周或一个月内唯一的ID。我不想创建具有虚函数机制的类层次结构像下面的代码片段那样做是个好主意吗?有什么建议吗?enumDuration{Day,Week,Month};templateclassIDGenerator{generateId();} 最佳答案 是的,它可以接受并且仅文件如果编译时多态性对您来说足够了-您将节省虚拟调用,这将允许更好的编译器优化。 关于c++-基于枚举的模板是个好主意吗?,我们在StackOverf