草庐IT

this-page

全部标签

c++ - 如何使用 shared_ptr 并从 enable_shared_from_this 继承来制作克隆方法

我已经看到编写返回boost::shared_ptr的克隆方法的一种有用方法是做classA{public:shared_ptrClone()const{return(shared_ptr(CloneImpl()));}protected:virtualA*CloneImpl()const{return(newA(*this));}};classB:publicA{public:shared_ptrClone()const{return(shared_ptr(CloneImpl()));}protected:virtualB*CloneImpl()const{return(newB(*

c++ - 在 "delete this"之后访问局部变量

我有一个使用引用计数机制的类。当引用计数降为零时,通过调用deletethis最终销毁此类的对象。我的问题是:在deletethis之后我可以使用本地堆栈变量吗?这是一个更具体的例子:classRefCountedClass{public:RefCountedClass(Mutex&m):mutex_(m){}...private:Mutex&mutex_;voidRemoveReference(){//AsIunderstand,mutex_willbedestroyedafterdelete,//butusingmisallrightbecauseitison-stackand//

c++ - C++ 中的数组 : can you explain what this line of code is doing?

我需要修改一些C++代码,但由于我对这门语言还比较陌生,所以在理解某些表达式时遇到了困难。我有一个函数voidfunc(doublem[2][12],doublen[2][3])像这样从其他函数内部调用doubleA[12];doubleB[6];(...)func((double(*)[12])A,(double(*)[3])B)最后一行代码是将一维数组转换为二维数组,但到底发生了什么?我可以使用相同的技术将一维数组转换为二维数组吗?:doubleA[12];doubleB[6];(double(*)[12])A[0][5]=5; 最佳答案

c++ - 为什么 std::function 在签名中接受 this 引用?

成员函数有一个隐含的this指针参数。为什么std::function接受这个签名,那么,这里的S是一个简单的类?(completesample)std::functionfunc=&S::foo;调用它也可以,并且可以区分对象:Ss1={5};Ss2={6};func(s1);//prints5func(s2);//prints6我通常期望的是它需要一个指针,它也能正常工作:(completesample)std::functionfunc=&S::foo;Ss1={5};Ss2={6};func(&s1);//prints5func(&s2);//prints6当隐式this参数是

c++ - 如何在不破坏 vtbl 的情况下执行与 memset(this, ...) 等效的操作?

我知道memset不适合用于class初始化。例如,类似于以下内容:classX{public:X(){memset(this,0,sizeof(*this));}...};如果混合中有virtual函数,将会破坏vtbl。我正在处理一个(巨大的)遗留代码库,它是C-ish但用C++编译,因此所有有问题的成员通常都是POD,不需要传统的C++构造函数。C++的使用逐渐深入(如虚函数),这让没有意识到memset具有这些额外的C++dentry的开发人员感到痛苦。我想知道是否有一种C++安全的方法来执行初始的全能零初始化,然后可以在不适合零初始化的情况下进行特定的按成员初始化?我找到了类

c++ - 使用 static_cast 处理混合(基础和派生)对象的 vector 是否存在性能风险? (又名 "it this a dumb idea?")

给定基类gameObject和派生类animatedGameObject,我认为将它们的所有实例存储在std::vector。如果vectorGameObjects声明为gameObject*的基类型,则派生对象实例需要强制转换。例子:vectorGameObjects;gameObjectA*=newgameObject(...init...);animatedGameObjectB*=newanimatedGameObject(...init...);GameObjects.push_back(A);GameObjects.push_back(B);//toaccesstheani

c++ - 枚举 [标签] [ : type] {enum-list} [declarator] in C++ - is this legal?

我正在使用C++中的自定义枚举类型,但它没有很多值。我想尝试减小它们占用的大小,而且我听说enum类型是alwaysintegersbydefault.然后我遇到了MSDNentryonC++enumerations,发现下面的语法很有趣:enum[:type]{enum-list};果然,当我执行以下操作时,它编译出了我想要的(VS2008):enumplane:unsignedchar{xy,xz,yz};现在,您可以从我的枚举常量中看出我不需要太多空间-unsignedchar类型非常适合我的使用。但是,我不得不说,我从未在互联网上的其他地方任何地方见过这种形式——大多数人甚至似

c++ - 尽管捕获了所有内容,但为什么 'this' 是必需的

谁能向我解释为什么我必须在第二个lambda中显式地写“this->”,即使我捕获了所有内容?完整性错误信息:cannotcallmemberfunction'result_ttest::get()'withoutobject#include#include#include#includeusingresult_t=std::function;structtest{boolnoMore=false;result_tget(){return[this]{std::vectorvec;vec.push_back(1);vec.push_back(2);vec.push_back(3);if

c++ - 数据成员地址是否位于 (this) 和 (this+1) 之间?

假设我们在一个成员函数中有如下两个不等式thisdata_member和&this->data_member它们能保证是真的吗?(在我检查过的一些情况下,它们似乎是正确的。)编辑:我漏掉了符号,现在它是不等式的正确形式。 最佳答案 来自CPP标准草案4713:6.6.2Objectmodel[intro.object]/7Anobjectoftriviallycopyableorstandard-layouttype(6.7)shalloccupycontiguousbytesofstorage.12.2Classmembers[c

c++ - 在 C++ 中,为什么 this 关键字不是引用?

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:Why‘this’isapointerandnotareference?在C++中this是指针而不是引用是否有充分的理由?