如何避免在c++中使用指针/类型定义
How to avoid using pointers/typedefs in C++
每当我编写c++代码时,我总是最终使用指针类型和->来引用成员函数。有没有办法让我避免这样的代码:
typedef Node *NodeRef;
typedef Graph *GraphRef;
Node{
vector<NodeRef> nodeList;
};
Graph{
vector<NodeRef> list;
};
Node::Node(){
nodeList.push_back(this);
}
NodeRef n = new NodeRef();
n->someMemberFunction();
n->someOtherMemberFuction()->aThirdMemberFunction();
我是否可以使用.
进行成员访问,并使用原始对象类型或引用而不是typedef指针类型?
NodeRef n = new NodeRef();
这甚至不会编译,我假设你想使用new Node()
1)你为什么要用new
?这样做有什么不对:
Node n;
n.someMemberFunction();
大作。现在你没有指针了
如果你不想在这里使用指针:
n.someOtherMemberFuction()->aThirdMemberFunction();
那么就不要从someOtherMemberFunction()
返回一个指针。
new
,则使用智能指针来拥有对象:
std::unique_ptr<Node> n(new Node);
如果你不这样做,小猫会死,血会从天而降。
如果你不能使用std::unique_ptr
,那就使用boost::shared_ptr
或boost::scoped_ptr
。
std::unique_ptr<Node> np(new Node);
Node& n = *np;
n.someMemberFunction();
n.someOtherMemberFuction()->aThirdMemberFunction();
首先…指针没有任何问题。但是,你总是可以使用引用。
引用允许您使用.
而不是->
。还有更多的不同之处……但是看看它,你就会明白。div;)
相关文章:
- C++中的双指针类型转换
- C++默认情况下,指针类型数组的元素是否保证初始化为 nullptr?
- 将类指针类型转换为键时出错
- 错误:表达式必须具有算术、无作用域枚举或带有运算符重载的指针类型
- C++在一个映射中存储不同的指针类型(并处理销毁)
- 指针类型类成员的动态强制转换的恒定性是什么?
- 我正在尝试将表的地址传递给要在另一个函数中使用的指针,但得到不兼容的指针类型
- 在将派生类指针类型转换为派生类指针后,从基类指针调用派生类函数
- 如何使用静态多态性在 int 和指针类型之间进行转换?
- STL 函数和函数类型与函数指针类型
- 如何调用指针类型的方法(禁用多态性)?
- 为什么新表达式可以正确生成指针类型,即使它应该返回 void*?
- 对于非常量指针类型的参数,未调用具有常量指针模板类型参数的功能
- 是否允许调用方对我的 Builder 类使用任何指针类型(包括智能指针)?
- OPENCL 警告:不兼容的指针类型将'float __global[16]'传递给类型为 '__global float4 的参数 *
- 专门用于"direct"函数类型(与函数指针类型相对)
- 指向成员的指针类型和模板
- 返回对常量结构(指针类型)成员的引用:明显的左值到右值转换
- 在C++17中,为什么类模板和函数模板的指针类型推导明显不一致
- 为什么允许将整型、枚举和指向成员的指针类型reinterpret_cast到自身?