小编the*_*one的帖子

何时返回C++中的指针,标量和引用?

我正在从Java转向C++,并且对语言的灵活性感到有些困惑.有一点是存储对象的方法有三种:指针,引用和标量(如果我理解正确,则存储对象本身).

我倾向于尽可能使用引用,因为它尽可能接近Java.在某些情况下,例如派生属性的getter,这是不可能的:

MyType &MyClass::getSomeAttribute() {
    MyType t;
    return t;
}
Run Code Online (Sandbox Code Playgroud)

这不会编译,因为t只存在于范围内,getSomeAttribute()并且如果我返回对它的引用,它将在客户端可以使用之前指出它.

因此,我有两个选择:

  1. 返回一个指针
  2. 返回一个标量

返回指针看起来像这样:

MyType *MyClass::getSomeAttribute() {
    MyType *t = new MyType;
    return t;
}
Run Code Online (Sandbox Code Playgroud)

这样做,但客户端必须检查此指针NULL才能确定,这是引用不必要的.另一个问题是调用者必须确保t解除分配,如果我可以避免它,我宁愿不处理它.

另一种方法是返回对象本身(标量):

MyType MyClass::getSomeAttribute() {
    MyType t;
    return t;
}
Run Code Online (Sandbox Code Playgroud)

这非常简单,正是我在这种情况下想要的东西:感觉就像一个引用,它不能为空.如果对象超出客户端代码的范围,则会将其删除.非常方便.但是,我很少看到有人这样做,这有什么原因吗?如果我返回标量而不是指针或引用,是否存在某种性能问题?

处理这个问题最常见/最优雅的方法是什么?

c++ scalar pointers reference

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

将二进制文件放在CMake中的哪里?

在我的项目中,所有源代码都驻留在名为"src"的文件夹中.在我的项目根目录中有一个CMakeLists.txt文件(在"src"之上),但它只是声明项目并包含"src"子目录.src下的CMakeLists.txt文件可以完成所有工作,包括"add_binary".

(这是一种常见的方式,还是应该将所有智能放在根级别的CMakeLists.txt文件中?)

如果我现在构建项目,我的二进制文件放在src文件夹中,但这没有多大意义,我宁愿把它放在根文件夹或专用的"bin"文件夹中.

你怎么做到这一点?

cmake

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

标签 统计

c++ ×1

cmake ×1

pointers ×1

reference ×1

scalar ×1