【发布时间】:2017-09-07 13:22:32
【问题描述】:
我知道如何为实体(堆栈)对象(如智能指针)重载 operator->
#include <iostream>
struct A { void foo() {} };
struct B {
A* pa;
A* operator->() {
return pa;
}
};
int main() {
B b;
b->foo(); // b is SOLID object on stack: b.pa = ...
}
但我想要这个:
B * pb = new B();
pb->foo(); // to call my overload
数据库管理器单例设计需要这个:
class DatabaseManager
{
private:
static DatabaseManager * sharedInstance_;
sqdb::Db *db = nullptr;
public:
static DatabaseManager * instance();
sqdb::Db * operator->() {
return db;
}
}
我基本上想要这种行为
auto m = DatabaseManager::instance();
m->Query(...); // db->Query
【问题讨论】:
-
应该是
(*pb)->foo();。你不能为指针重载operator -> -
你不能。没有内置运算符的重载。
-
你不能这样做。你为什么想要?
-
为什么不返回参考?
-
@barney 你应该阅读指针/引用。引用在离开作用域时不会导致调用析构函数。此外,析构函数永远不会为新的对象自动调用,这就是为什么它们在现代 C++ 中通常不受欢迎(因为您需要记住手动调用
delete)。
标签: c++ operator-overloading operators