- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在使用智能指针的 C++ 项目中,例如 boost::shared_ptr
,关于使用“this
”的好的设计理念是什么?
考虑一下:
this
指针。这是一个原始指针,无法更改。 this
在另一个变量中或将其传递给另一个函数,该函数可能将其存储以备后用或将其绑定(bind)在回调中,我正在创建错误,当有人决定创建指向我的类的共享指针时,这些错误会被引入。
this
合适指针? 是否有设计范式可以防止与此相关的错误?
最佳答案
错误的问题
In a C++ project that uses smart pointers
shared_ptr
是对对象的引用并建立关系:对象在此之前不得销毁
shared_ptr
, 当这个
shared_ptr
被销毁,如果它是最后一个别名该对象,则必须立即销毁该对象。 (
unique_ptr
可以被视为
shared_ptr
的一个特例,其中根据定义零别名,所以
unique_ptr
总是最后一个别名对象。)
In a C++ project, what is a good design philosophy regarding use of "this"?
It's dangerous to store the raw pointer for later use.
You've given up control of object deletion and trust the responsible component to do it at the right time.
If I ever store this in another variable or pass it to another function which could potentially store it for later or bind it in a callback, I'm creating bugs that are introduced when anyone decides to use my class.
关于c++ - 智能指针 + "this"被认为是有害的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/382166/
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我在摆弄 LinqToSQL 和 LINQPad,我注意到 SingleOrDefault() 没有对生成的 SQL 进行任何过滤或限制(我几乎期望与 Take(1) 等效)。 因此,假设您想保护自己
我是一名优秀的程序员,十分优秀!