我知道模板类的定义和实现应该在同一个头文件中.但是我在学校的教学方式有所不同.
我将在头文件中有模板类的定义,在头文件的末尾,我将执行#include"MyFile.cpp",其中包含模板化类的实现.
这是不好的编程习惯吗?
在编程测试中我被问到这个questino.问题是,我作为参数在float中传递,并询问以下代码何时为false.
bool result = (floatValue == floatValue);
Run Code Online (Sandbox Code Playgroud)
我想不出一个有效的理由或何时会出现这种情况,但仍然不能.最后,我回答说永远不会出现这种情况.想知道是否有人可以给我一些关于什么时候这是假的例子
我已经在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)
但我仍然得到删除的功能错误.任何人都可以看到我做错了什么或指向一些可以帮助的资源吗?
可以说我有一个类如下:
class Base
{
int a;
public void Initialize(int a)
{
a = a;
}
}
Run Code Online (Sandbox Code Playgroud)
(是的,这段代码是糟糕的编程习惯,但我只是写了它,所以它可以用作一个例子)
对于函数Initialize,成员变量的名称和传入的参数是相同的.
在这种情况下,这是未定义的行为吗?或者,如果存在任何歧义,编译器是否选择成员变量(或参数).
我目前正在学习新的c ++内容,而我目前正在学习使用智能指针(std::unique_ptr).
可以说,我有一个std::vector的std::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(因此,不会导致内存泄漏).