jjzjj

c++ - 析构函数在 C++ 中是如何工作的

这是我的C++代码:classSample{public:int*ptr;Sample(inti){ptr=newint(i);}~Sample(){deleteptr;}voidPrintVal(){cout它返回如下输出:SayiaminsomeFuncNullpointerassignment(Run-timeerror)这里当对象按值传递给SomeFunc时,当控件从函数返回时调用对象的析构函数我应该对吗?如果是那么为什么会这样?什么是解决方案??? 最佳答案 Sample按值传递给SomeFunc,这意味着制作了一个拷贝。

C++ std::sort 与类中的谓词函数

我想在特定类中以特定顺序对特定结构的vector进行排序。我在一个类中编写了结构和谓词函数的定义,并在具有这些结构和函数的类的方法中运行std::sort。但是出现了编译错误。gcc版本是4.0.1,操作系统是MacOSX。代码如下:classsample{public:structs{intx;inty;};boolcmp(structsa,structsb){if(a.x==b.x)returna.yvec;//...sort(vec.begin(),vec.end(),cmp);//compilationerror//...return0;}};intmain(void){sam

c++:根据预定义的元素索引选择 std::vector 的子集

我正在寻找一种有效的方法来修剪或复制现有std::vector的子集。元素符合子集/保留条件的标准是它们的索引包含在单独的预定义std::vector中。e.gstd::vectorTest={"A","B","C","D","E"}std::vectorSelectionV={1,2,5}Result={"A","B","E"}我将在一个非常大的vector上执行此操作,并且可能会定期执行此操作,因此我正在寻找尽可能高效的方法。我也在考虑的替代方案,但同样不确定有效的方法是...由于对象Test已填充(在我的例子中它是第3方定义的对象),它是使用迭代器单次传递的结果(无法直接访问元素

c++ - 如何在Qt中编写客户端-服务器应用程序和实现简单的协议(protocol)

也许这是个愚蠢的问题,实际上它很有吸引力,或者Qt对我来说太复杂了。事情是这样的:我在编写客户端-服务器应用程序时习惯了java,它非常简单。我想在C++中做同样的事情(我对C++本身非常熟悉),我选择学习Qt。我尝试用qt编写一些应用程序,但部分成功。首先困扰我的是信号和槽。我知道如何在GUI编程中使用它们,但它让我对网络感到困惑。而且阻塞有问题。当我在java中调用BufferedReader的readLine()方法时,它会阻塞,直到它从套接字连接接收到行。在Qt中,我必须确保每次都有行可用,并在没有行时进行处理。当我将QSocket的错误信号连接到我的一些自定义槽时,信号在服务

c++ - 字符串->结构CMap

我的要求是给定一个字符串作为映射的键,我应该能够检索一个结构。有人可以为此发布示例代码吗?例如:struct{inta;intb;intc;}struct_sample;string1->strcut_sample 最佳答案 CMapmyMap;struct_sampleaTest;aTest.a=1;aTest.b=2;aTest.c=3;myMap.SetAt("test",aTest);...struct_sampleaLookupTest;BOOLbExists=myMap.Lookup("test",aLookupTest

c++ - 不调用复制构造函数

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whycopyconstructorisnotcalledinthiscase?考虑下面的示例程序:#includeusingnamespacestd;classsample{private:intx;public:sample(inta=0):x(a){cout在Line1中,首先sample类的构造函数被显式调用,参数为20。然后我希望复制构造函数被调用初始化s2。在第2行中,首先sample类的构造函数首先被参数20调用隐式。这里我还希望调用复制构造函数来初始化s2。在这两种情况下,复制构造函数都没有被

c++ - C++中的命名空间问题

我有两个文件Sample.cpp和Main_file.cpp。Sample.cpp只有一个命名空间n1,其中包含int变量x的定义。我想在我的main_file.cpp中打印这个变量x。我该怎么做?//Sample.cpp_BEGINSnamespacen1{intx=10;}//Sample.cpp_ENDS//Main_FILE_BEGINSvoidmain(){printx;}//MAIN_FILE_ENDS感谢您提供的任何帮助。 最佳答案 您使用变量的完全限定名称:intmain(){n1::x=10;return0;}

c++ - 如何通过编译错误找到 C++ 复制构造函数的使用位置?

简而言之:有没有什么方法可以修改类定义,使其在复制构造函数的使用点处无法编译,无论它在何处使用?我有一个非常大的项目,正在清理一些类定义。有一个类我明确不想使用复制构造函数(让我们忽略为什么这是为了讨论),为了安全起见,我想我只是将复制构造函数定义为私有(private)而不是实际上实现它......如果我试图在任何地方使用它,它会抛出一个编译错误。瞧,它编译得很好,但我有一个链接器错误......找不到复制构造函数实现!大概这意味着它在某处使用,但我无法找到它的使用位置。顺便说一句,这是VisualStudio2010。所以我的问题是,有没有什么方法可以修改类定义,使其在使用时无法编

c++ - 我怎样才能让我的模板函数看到以后定义的其他全局方法?

(Oktalist在下面给出了一个很好的答案,请检查它和下面的评论,以帮助证明我们讨论的所有内容,我在我的问题底部添加了一个完整的编译解决方案,以证明讨论的所有内容。)我有一组命名空间全局方法和模板化方法,如下所示:namespacePrettyPrint{Stringto_string(boolval);Stringto_string(charval);Stringto_string(intval);Stringto_string(uintval);//ETC...templateStringto_string(constT*val){if(!val)returnU("NULL");

c++ - 为什么 google test sample 将测试放在匿名命名空间中?

这不是Superiorityofunnamednamespaceoverstatic?的拷贝在将问题标记为重复之前,请仔细阅读问题。我不是问为什么要使用未命名的命名空间而不是静态的!我在问,为什么googletests放在未命名的命名空间中?这是google测试遵循的某种约定吗?如果是,为什么?无论它们是否在未命名的命名空间中,测试都可以正常工作,所以显然这不是必需的。**我从github克隆了googletest并为我的mac构建了它。它工作正常,但我注意到在他们提供的示例测试代码中,他们将测试放在未命名的命名空间中。有谁知道为什么吗?例如,见以下文件:googletest/goog