草庐IT

C++ 不允许堆栈实例但允许新的删除

基本上我想要的是:classMyClass{public:MyClass()=default;//whatshouldIdo?}MyClassmc;//compiletimeerror;autopmc=newMyClass;//OKdeletepmc;//OKtoo我知道我可以通过隐藏构造函数(现在不能在类外新建)或隐藏析构函数(现在不能在类外删除)或隐藏两者来使其成为堆。如果我不想引入一些新的命名函数而只想使用旧的新函数和删除函数怎么办?有可能吗(即使有hack)? 最佳答案 我的“像一个智能指针,但不是”的想法:#include

C++ 显式构造函数

我有一个包含2个构造函数的类。explicitMyClass(size_tnum);templateMyClass(TmyObj);无论何时我都想要那个MyClassobj(30);将调用第一个构造函数,以及隐式构造函数和MyClassobj=30;将调用第二个ctor。我怎样才能让它发生? 最佳答案 30是一个带符号的整数值,因此它不完全符合您的第一个构造函数的签名(因此,模板被实例化)。您可以更改显式构造函数的签名以接受int,然后Myclassobj(30);将调用显式构造函数,或者调用它30u以便您匹配显式签名。

c++ - 函数中auto_ptr的返回值

我遇到过这样的代码。MyClassMyClass::get_information(constsome_datastructure*record){auto_ptrvariable(newMyClass());variable->set_article_id(record->article_id);return*variable.get();}我知道这会返回一个(拷贝?)MyClass类型的对象。最初,我认为它正在返回对我来说没有意义的auto_ptr对象(?)因为我认为auto_ptr对象在超出范围时会被销毁。无论如何,上面的代码可以吗?对象*variable.get()在函数返回时

c++ - 如何为 MyClass** 传递 MyClass[][]?

为什么我不能通过Pointsrc[1][4]={{Point(border,border),Point(border,h-border),Point(w-border,h-border),Point(w-border,h-border)}};作为polylines(frame,src,ns,1,true,CV_RGB(255,255,255),2);在哪里折线有原型(prototype)voidpolylines(Mat&img,constPoint**pts,constint*npts,intncontours,boolisClosed,constScalar&color,intth

c++ - 单元测试拷贝构造函数和赋值运算符

我正在为几个类(C++)编写单元测试,在尝试为复制构造函数和赋值运算符编写单元测试时遇到了一个问题。两者都可能出错的一个基本问题是,程序员向类添加了一个成员,然后忘记更新c'ctor和/或operator=。我当然可以按照以下方式编写单元测试:classMyClass(){public:inta,b;non_trivial_copyablenasty;MyClass&operator=(constMyClass&_r){if(this==&r)return*this;a=_r.a;b=_r.b;nasty=acquire_non_trivial_copyable();}};TEST(M

c++ - 从 cuda 内核访问类数据成员——如何设计适当的主机/设备交互?

我一直在尝试将一些cuda/C代码转换成更面向对象的代码,但以我目前对cuda功能机制的理解,我的目标似乎并不容易实现。对于这种情况,我也找不到很好的解释。毕竟这可能是不可能的。我有一个global类myClass的对象,它包含一个要填充到内核中的数组。myClass中的方法应该如何定义,以便数组和bool成员从设备可见,然后数组可以复制回主机?我使用的是cuda7.5,我的卡的计算能力是3.5。这是描述情况的暂定结构:#include#include#includeclassmyClass{public:boolbool_var;//Setfromhostandreadablefro

c++ - 是否有可能我有一个类的前向声明,而不是在头文件中使它们成为引用或指针

//Iprefertoperformforwarddeclarationonmyclass,asIdonot//wishtoship"myclass.h"toclient//However,thefollowingcodedoesn'tallowmetodoso,asclassdefination//isneededinheaderfile.////a.h#include"myclass.h"classa{public:a();myclassme;};我尝试换一种方式。但是,我需要使用动态分配,而我通常会尽量避免这种情况。//a.hclassmyclass;classa{public:

c++ - 成员类与#includes

我最近发现在您的头文件中包含#include是一种不好的形式,因为任何使用您的代码的人都会获得他们不一定想要的所有这些额外包含。但是,对于将成员变量定义为另一个类的类型的类,还有什么选择呢?例如,我最长的时间是按以下方式做事:/*HeaderfileforclassmyGrades*/#include//bad#include"classResult.h"//badclassmyGrades{vectorgrades;intaverage;intbestScore;}(请原谅这是一个高度人为的例子)所以,如果我想去掉#include行,有什么方法可以保留vector还是我必须在完全不同

c++ - "MyClass mc = MyClass()"还是 "MyClass mc"?

有什么区别MyClassmc=MyClass();和MyClassmc;在C++中? 最佳答案 第一个调用复制构造函数,以临时对象作为参数-MyClass()创建临时对象。第二个调用默认构造函数。实际上,在大多数情况下,它们针对相同的代码进行了优化,但这就是语义上的差异。如Negal所述,POD类型的情况略有不同;当“MyClass”是POD时,第二个片段不会对mc进行值初始化,而第一个片段会。 关于c++-"MyClassmc=MyClass()"还是"MyClassmc"?,我们在S

不提供模板参数的 C++ 类指针

你好亲爱的地下世界的人们称为互联网。假设我们有一个名为X的类,带有模板参数(Y):templateclassX{//...};我想创建一个没有(还没有)模板参数的类的实例,然后用模板参数定义指针:X*myClass;//....myClass=newX();这有可能吗? 最佳答案 X不是没有模板参数的类型,所以不,不幸的是不是。如果X有一个定义了您想要使用的接口(interface)的基类,您就可以实现您想要的。例如,structInterface{Interface(){}virtual~Interface(){}virtualv