小编dwn*_*enr的帖子

在模板类的头文件中包含.cpp文件

我知道模板类的定义和实现应该在同一个头文件中.但是我在学校的教学方式有所不同.

我将在头文件中有模板类的定义,在头文件的末尾,我将执行#include"MyFile.cpp",其中包含模板化类的实现.

这是不好的编程习惯吗?

c++ templates

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

何时浮点变量不等于自身

在编程测试中我被问到这个questino.问题是,我作为参数在float中传递,并询问以下代码何时为false.

bool result  = (floatValue == floatValue);
Run Code Online (Sandbox Code Playgroud)

我想不出一个有效的理由或何时会出现这种情况,但仍然不能.最后,我回答说永远不会出现这种情况.想知道是否有人可以给我一些关于什么时候这是假的例子

c++ floating-point

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

std :: unique_ptr尝试引用已删除的函数

我已经在Unity上工作了一段时间,然后回来使用Visual Studio 2015做一些C++.我遇到了这个类定义

class A
{
public:
  A();
  virtual ~A();
  A(const A&) = delete;
  A& operator=(const A&) = delete;

private:
  …
}
Run Code Online (Sandbox Code Playgroud)

此类动态分配如下:

ObjPtr obj = ObjPtr(new A());
Run Code Online (Sandbox Code Playgroud)

where ObjPtr是一个定义的类型,如下所示:

typedef std::unique_ptr<A> objPtr;
Run Code Online (Sandbox Code Playgroud)

并将这些创建的对象添加到std::vector<ObjPtr>使用中std::move.在一个点上,我需要遍历对象的列表,如果我找到的东西,满足我的标准,保持它的一个副本.

ObjPtr keep;

for(auto& object : GetObjectList() )
{
  if(/*check if its the object I want*/)
  {
    keep = object;
  }
}
Run Code Online (Sandbox Code Playgroud)

GetObjectList返回的位置const std::vector<ObjPtr>&.

但我得到了"试图引用删除的功能".我做了一些谷歌搜索并试图删除该= delete部分,甚至评论了2行.我甚至试图这样做

ObjPtr keep = std::move(object);
Run Code Online (Sandbox Code Playgroud)

但我仍然得到删除的功能错误.任何人都可以看到我做错了什么或指向一些可以帮助的资源吗?

c++ c++11

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

当成员变量的名称和传入的参数都相同时,它是否是未定义的行为?

可以说我有一个类如下:

class Base
{
  int a;

  public void Initialize(int a)
  {
    a = a;
  }
}
Run Code Online (Sandbox Code Playgroud)

(是的,这段代码是糟糕的编程习惯,但我只是写了它,所以它可以用作一个例子)

对于函数Initialize,成员变量的名称和传入的参数是相同的.

在这种情况下,这是未定义的行为吗?或者,如果存在任何歧义,编译器是否选择成员变量(或参数).

c++

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

当我获得指向智能指针的指针时,是否必须释放内存?

我目前正在学习新的c ++内容,而我目前正在学习使用智能指针(std::unique_ptr).

可以说,我有一个std::vectorstd::unique_ptr.在我的代码中的某一点,我需要迭代这个stl向量并挑选出我需要计算的对象.

  for (const auto& obj : objectList)
  {
    if(/*check if this is an object I need*/)
      OtherFunc(obj.get());
  }

  void OtherFun(object* obj)
  {
     std::vector tempVector.push_back(obj);
  }
Run Code Online (Sandbox Code Playgroud)

在OtherFunc中,我将这个作为参数传入的对象添加到另一个std::vector(表示为otherVector),我保留并进行计算.我不希望OtherFunc拥有对象的所有权.我只需要保留它们,所以我不必每帧传递对象.

我知道如果智能指针离开作用域(或者在我的情况下,退出程序)将自行解除分配,包含智能指针对象的对象 otherVector会发生什么.我试着在cplusplus.com查看文档,但我无法得到我的问题的答案.我是否必须取消分配我在otherVector中保存的所有对象?或者由于对象最初是智能指针,我可以假设otherVector中的所有指针也将变为null(因此,不会导致内存泄漏).

c++ smart-pointers c++11

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

标签 统计

c++ ×5

c++11 ×2

floating-point ×1

smart-pointers ×1

templates ×1