这可能是一个琐碎的问题,但我没有找到令人满意的答案,也无法真正弄清楚到底是怎么回事。
假设您有以下代码:
#include <iostream>
class Foo
{
public:
void operator=(int)
{
std::cout << "calling Foo::operator=(int)" << std::endl;
}
};
int main()
{
Foo a, b;
a = 10; // it works, of course, no questions
对于学校作业,我尝试使用指向Employee对象的唯一指针向量来访问Employee数据,但找不到语法/编译器错误。有人能告诉我我哪里做错了吗?必须以这种方式使用智能指针的向量。
下面是适用的代码:
// Create an Employee
Employee EmpRec;
// Assign value to a uniqueptr
unique_ptr<Employee> TempEmp;
*TempEmp = EmpRec;
// Create a vector of unique_ptr<Employee>
vector<unique_ptr<
下面的代码给出了错误:
use of deleted function ‘constexpr B::B(const B&)’
现在,我知道这是因为通过指定移动构造函数(有意)隐式删除了复制构造函数,并且复制向量会导致对(已删除的)复制构造函数的调用。我也理解为什么要使用向量的复制构造函数和赋值操作符。显然,我希望使用move构造函数和赋值操作符:移动对象,因此也要移动它包含的向量。那么,如何让移动构造函数/赋值操作符使用向量的移动构造函数/赋值操作符?
以下是代码:
#include <vector>
class B {
private:
/* something
下面是我不理解的代码:
class Base
{
public:
Base(){}
Base operator=(Base ob2)
{
std::cout << "Using Base operator=() " << '\n';
return *this;
}
};
class Derived : public Base
{
public:
Derived(){}
Derived operator=(Base ob2)
{
st
我有一个类C,它不定义operator=。我正在尝试使用像这样的向量:std::vector<std::pair<C,D>> vec;。现在,我的问题是,我不能抹去这对后,我完成了它。编译器抱怨缺少operator= for C。我能不能没有一个没有这个运算符的类的向量?我怎么才能避开这一切?我不能将赋值添加到C。这是我得到的错误:
error C2582: 'operator =' function is unavailable in 'C' C:\...\include\utility 196 1 my-lib
这是我的密
受post 的启发,我想知道默认的虚拟析构函数是否也是如此。
class WidgetBase // Base class of all widgets
{
public:
virtual ~WidgetBase() = default;
// ...
};
由于该类是小部件层次结构的基类,所以我必须定义它的析构函数虚拟,以避免在处理基类指针时发生内存泄漏和未定义的行为。另一方面,我不想阻止编译器自动生成移动操作。
默认的虚拟析构函数是否阻止编译器生成的移动操作?
向向量中添加对象的正确方法是什么?似乎向量是对象的副本,而不是实际的对象.
例如:
class MyClass{
private:
std::vector<Texture>_textures;
public:
void addATexture(int textureWidth,int textureHeight){
Texture tex(textureWidth,textureHeight);
_textures.push_back(tex);//A copy of tex is pushed into in..
} // ---> At
#include <vector>
#include <iostream>
#include <memory>
int main()
{
// create the vector
std::vector< std::unique_ptr< int > > v;
for ( int i = 0; i < 5; ++ i )
{
std::unique_ptr< int > newItem( new int(i) );
v.push_back( std::
如果X类是从Y类派生而来的,而Y类具有以下任何一种:
A用户声明的复制构造函数、A用户声明的副本赋值操作符、A用户声明的析构函数用户声明的移动构造函数、用户声明的移动赋值操作符、<code>H 210<//code><code>f 211<//code>
对于类X,移动构造函数和移动赋值操作符是否会被隐式默认,前提是它没有声明上述任何一个?
例如:
struct Y
{
virtual ~Y() {}
// .... stuff
};
struct X : public Y
{
// ... stuff but n
考虑以下两个方案:
#include<variant>
#include<iostream>
constexpr auto f() {
using T = std::variant<bool, int>;
T t(false);
t = T(true);
return std::get<bool>(t);
}
template<auto V>
void print() { std::cout << V << "\n"; }
int main() {