草庐IT

OPERATOR

全部标签

c++ - 为什么要明确调用 operator new

我看到了这样的代码:void*NewElts=operatornew(NewCapacityInBytes);并且匹配调用显式operatordelete在后面使用。为什么这样做而不是:void*NewElts=newchar[NewCapacityInBytes];为什么要显式调用operatornew和operatordelete?? 最佳答案 显式调用operatornew就像调用全局“原始”运算符new。全局operatornew返回一个原始内存块,而不调用对象的构造函数或任何用户定义的new重载。所以基本上,全局opera

c++ - C++中运算符=的继承问题

我在继承operator=时遇到问题。为什么这段代码不起作用,修复它的最佳方法是什么?#includeclassA{public:A&operator=(constA&a){x=a.x;return*this;}booloperator==(constA&a){returnx==a.x;}virtualintget()=0;//Abstractprotected:intx;};classB:publicA{public:B(intx){this->x=x;}intget(){returnx;}};classC:publicA{public:C(intx){this->x=x;}intg

c++ - C++中运算符=的继承问题

我在继承operator=时遇到问题。为什么这段代码不起作用,修复它的最佳方法是什么?#includeclassA{public:A&operator=(constA&a){x=a.x;return*this;}booloperator==(constA&a){returnx==a.x;}virtualintget()=0;//Abstractprotected:intx;};classB:publicA{public:B(intx){this->x=x;}intget(){returnx;}};classC:publicA{public:C(intx){this->x=x;}intg

c++ - 删除 NULL 指针在写入析构函数时不会调用重载删除

classWidget{public:Widget(){cout在此代码中,deletew不会在析构函数存在时调用重载的delete运算符。如果省略析构函数,则调用重载的delete。为什么会这样?写入~Widget()时的输出operatornewOutofMemory~Widget()未写入时的输出operatornewOutofMemoryoperatordelete 最佳答案 我记得不久前在comp.lang.c++.moderated中关于operatordelete的类似内容。我现在找不到它,但答案是这样的..Unfor

c++ - 删除 NULL 指针在写入析构函数时不会调用重载删除

classWidget{public:Widget(){cout在此代码中,deletew不会在析构函数存在时调用重载的delete运算符。如果省略析构函数,则调用重载的delete。为什么会这样?写入~Widget()时的输出operatornewOutofMemory~Widget()未写入时的输出operatornewOutofMemoryoperatordelete 最佳答案 我记得不久前在comp.lang.c++.moderated中关于operatordelete的类似内容。我现在找不到它,但答案是这样的..Unfor

c++ - 减少 operator= 和复制构造函数之间的代码重复

我有一个需要非默认复制构造函数和赋值运算符的类(它包含指针列表)。有没有什么通用的方法可以减少复制构造函数和赋值运算符之间的代码重复? 最佳答案 没有“通用方法”来编写适用于所有情况的自定义复制构造函数和赋值运算符。但是有一个成语叫做“copy-&-swap”:classmyclass{...public:myclass(myclassconst&);voidswap(myclass&with);myclass&operator=(myclasscopy){this->swap(copy);return*this;}...};它在许

c++ - 减少 operator= 和复制构造函数之间的代码重复

我有一个需要非默认复制构造函数和赋值运算符的类(它包含指针列表)。有没有什么通用的方法可以减少复制构造函数和赋值运算符之间的代码重复? 最佳答案 没有“通用方法”来编写适用于所有情况的自定义复制构造函数和赋值运算符。但是有一个成语叫做“copy-&-swap”:classmyclass{...public:myclass(myclassconst&);voidswap(myclass&with);myclass&operator=(myclasscopy){this->swap(copy);return*this;}...};它在许

c++ - 为什么不为左值和右值重载 operator[]?

标准C++容器仅提供一个版本的operator[]对于像vector这样的容器和deque.它返回一个T&(除了vector,我将忽略它),这是一个左值。这意味着在这样的代码中,vectormakeVector();//factoryfunctionautocopyOfObject=makeVector()[0];//copyBigObjectcopyOfObject将被复制构造。鉴于makeVector()返回一个右值vector,预期copyOfObject似乎是合理的被移动构造。如果operator[]对于此类容器,对于右值和左值对象进行了重载,然后operator[]对于右值容

c++ - 为什么不为左值和右值重载 operator[]?

标准C++容器仅提供一个版本的operator[]对于像vector这样的容器和deque.它返回一个T&(除了vector,我将忽略它),这是一个左值。这意味着在这样的代码中,vectormakeVector();//factoryfunctionautocopyOfObject=makeVector()[0];//copyBigObjectcopyOfObject将被复制构造。鉴于makeVector()返回一个右值vector,预期copyOfObject似乎是合理的被移动构造。如果operator[]对于此类容器,对于右值和左值对象进行了重载,然后operator[]对于右值容

c++ - 从 C++11 智能指针继承并覆盖相对运算符是否可以?

根据cppreference.com,std::shared_ptr提供了一整套相对运算符(==,!=,出于某些目的,我更喜欢使用相对运算符来根据比较引用的对象(而不是指向它们的指针)对智能指针进行排序。这已经是我经常做的事情,但是使用我自己的“哑指针”,除了相对运算符之外,它们的行为大多类似于原始指针。我也想用标准的C++11智能指针做同样的事情。所以...是否可以继承C++11智能指针(shared_ptr、weak_ptr和unique_ptr)并覆盖相关运算符?有什么我需要注意的偷偷摸摸的问题吗?例如,我需要实现或使用using的其他方法来确保一切正常吗?为了终极懒惰,是否有可