标签: pod

为什么没有默认的move-assignment/move-constructor?

我是一个简单的程序员.我的类成员变量通常由POD类型和STL容器组成.因此,我很少需要编写赋值运算符或复制构造函数,因为这些是默认实现的.

除此之外,如果我使用std::move不可移动的对象,它使用赋值运算符,这意味着std::move非常安全.

由于我是一个简单的程序员,我想利用移动功能,而不需要为我编写的每个类添加移动构造函数/赋值运算符,因为编译器可以简单地将它们实现为" this->member1_ = std::move(other.member1_);..."

但它没有(至少在Visual 2010中没有),有什么特别的原因吗?

更重要的是; 有没有办法解决这个问题?

更新: 如果你低头看GManNickG的答案,他会为此提供一个很棒的宏.如果你不知道,如果你实现了移动语义,你可以删除交换成员函数.

c++ pod move-semantics c++11

87
推荐指数
4
解决办法
4万
查看次数

平凡与标准布局与POD

通俗地说,琐碎类型,标准布局类型和POD之间有什么区别?

具体来说,我想确定是否new Tnew T()任何模板参数不同T.哪种类型的性状is_trivial,is_standard_layout而且is_pod我应该选择?

(作为一个附带问题,可以在没有编译器魔法的情况下实现任何这些类型特征吗?)

c++ constructor initialization pod type-traits

69
推荐指数
2
解决办法
8729
查看次数

C++ - struct vs. class

可能的重复:
C/C++ Struct vs Class C++
中的POD类型是什么?

嗨,

C++ In a Nutshell一书中,在第6章:类中,在Access说明符下面,提到了以下内容:

在类定义中,成员和基类的默认访问权限是私有的.在结构定义中,默认值为public.这是类和结构之间的唯一区别,尽管按照惯例,一些程序员仅将结构用于POD类,并将类用于所有其他类.

我的问题是:

  • 类和结构之间是否存在另一个区别,因为结构不包含函数而只保存数据?
  • 什么是POD课程?而且,这里所有其他课程的含义是什么?那么特殊课程吗?

谢谢.

c++ struct class pod

50
推荐指数
3
解决办法
10万
查看次数

删除[]是否等于删除?

IP_ADAPTER_INFO *ptr=new IP_ADAPTER_INFO[100];
Run Code Online (Sandbox Code Playgroud)

如果我免费使用

delete ptr;
Run Code Online (Sandbox Code Playgroud)

它会导致内存泄漏,如果不是那么为什么?

这是VS2005生成的反汇编代码

; delete ptr;
0041351D  mov         eax,dword ptr [ptr] 
00413520  mov         dword ptr [ebp-0ECh],eax 
00413526  mov         ecx,dword ptr [ebp-0ECh] 
0041352C  push        ecx  
0041352D  call        operator delete (4111DBh) 
00413532  add         esp,4 

; delete []ptr;
00413535  mov         eax,dword ptr [ptr] 
00413538  mov         dword ptr [ebp-0E0h],eax 
0041353E  mov         ecx,dword ptr [ebp-0E0h] 
00413544  push        ecx  
00413545  call        operator delete[] (4111E5h) 
0041354A  add         esp,4 
Run Code Online (Sandbox Code Playgroud)

c++ memory-management pod

44
推荐指数
5
解决办法
1万
查看次数

为什么C++ 11的POD"标准布局"定义是这样的?

我正在研究C++ 11中新的,轻松的POD定义(第9.7节)

标准布局类是一个类:

  • 没有非标准布局类(或此类类型的数组)或引用类型的非静态数据成员,
  • 没有虚函数(10.3),也没有虚基类(10.1),
  • 对所有非静态数据成员具有相同的访问控制(第11条),
  • 没有非标准布局基类,
  • 或者在最派生类中没有非静态数据成员,并且最多只有一个具有非静态数据成员的基类,或者没有具有非静态数据成员的基类,并且
  • 没有与第一个非静态数据成员相同类型的基类.

我突出了让我感到惊讶的一些事情.

如果我们容忍具有不同访问控制的数据成员会出什么问题?

如果第一个数据成员也是基类会出什么问题?即

struct Foo {};
struct Good : Foo {int x; Foo y;};
struct Bad  : Foo {Foo y; int x;};
Run Code Online (Sandbox Code Playgroud)

我承认这是一个奇怪的结构,但为什么要Bad被禁止但不是Good

最后,如果不止一个组成类有数据成员,会出现什么问题?

c++ pod standard-layout c++11

41
推荐指数
3
解决办法
6446
查看次数

记录Perl代码的最佳方法是什么?

有什么建议我如何记录我的Perl代码?您使用了什么以及可以使用哪些工具来帮助我?

您使用哪个模块将pod转换为html?

documentation perl pod

27
推荐指数
5
解决办法
2万
查看次数

C++ POD结构继承?是否有关于派生成员的内存布局的保证

比方说,我有一个struct RGB,我想创建struct RGBA,继承RGB:

struct RGB {
    unsigned char r;
    unsigned char g;
    unsigned char b;
};

struct RGBA: RGB {
    unsigned char a;
};
Run Code Online (Sandbox Code Playgroud)

两者都将用于读取未压缩的图像数据:

RGBA *pixel=static_cast<RGBA *>(image->uncompressed_data);
Run Code Online (Sandbox Code Playgroud)

问题:关于内存布局,这样安全struct RGBA吗?有人保证:

  • unsigned char a之后RGB struct(不是之前)
  • 之间没有填充struct RGB和参数来自struct RGBA

会有#pragma pack帮助吗?这都是关于继承期间的内存布局.

c++ inheritance pod

25
推荐指数
2
解决办法
5437
查看次数

为什么使用这个POD结构作为基类是危险的?

我和一位同事进行了这次谈话,结果很有趣.假设我们有以下POD课程

struct A { 
  void clear() { memset(this, 0, sizeof(A)); } 

  int age; 
  char type; 
};
Run Code Online (Sandbox Code Playgroud)

clear旨在清除所有成员,设置为0(按字节顺序).如果我们A用作基类会出现什么问题?这里有一个微妙的漏洞来源.

c++ pod memset

23
推荐指数
2
解决办法
1164
查看次数

POD,非POD,右值和左值

任何人都能解释rvalues,左值,POD和非POD方面的细节,下面标记的第一个表达式不正确而下面标记的第二个表达式是否正常?根据我的理解,int()和A()都应该是rvalues,不是吗?


struct A {};

int main()
{
  int i;
  A a;

  int() = i; //Not OK (error).
  A() = a; //OK.

  return 0;
}

Run Code Online (Sandbox Code Playgroud)

c++ pod rvalue lvalue

21
推荐指数
1
解决办法
6739
查看次数

C++中的默认初始化

今天早上我问自己一些事情,我找不到正确"谷歌"的话:

让我们说:

struct Foo
{
  int bar;
};

struct Foo2
{
   int bar;
   Foo2() {}
};

struct Foo3
{
   int bar;
   Foo3() : bar(0) {}
};
Run Code Online (Sandbox Code Playgroud)

现在,如果我默认实例化Foo,Foo2并且Foo3:

Foo foo;
Foo2 foo2;
Foo3 foo3;
Run Code Online (Sandbox Code Playgroud)

在哪种情况下,bar会员是否正确初始化

(Foo3显然很明显地初始化它,并且只在这里显示明确差异Foo2所以问题主要是关于前两个.)

谢谢 !:)

c++ initialization pod

21
推荐指数
2
解决办法
7493
查看次数