如何在托管C++中正确实现类返回"this"的方法?
How to correctly implement methods of a class returning "this" in Managed C++?
我有一个类,它的方法应该返回对象本身,就像在Java中做return this;
。我尝试这样做:
foo:
namespace Foo {
public ref class Bar {
public:
Bar quux();
}
}
Foo.cpp:
Foo::Bar Foo::Bar::quux() {
return this;
}
编译器报错:error C2440: 'return' : cannot convert from 'Foo:Bar ^const ' to 'Foo::Bar'
我怎么做才对?
Bar quux();
这很可能是一个打字错误。很难诊断,c++/CLI编译器并不总是产生奇怪的错误消息。您应该返回一个引用到Bar
对象,它是一个引用类型,其对象存储在GC堆上。. net中没有自动克隆对象的机制。您不能依赖于自动生成的复制构造函数,您可能习惯于从本机c++中使用这种构造函数。在。net中,引用类型和值类型之间的区别很重要,原生c++根本没有这种区别,而是将所有对象都视为值。值类型可以复制,引用类型不能。
您可以添加Bar(const Bar%)
复制构造函数来保持编译器的快乐,它将自动使用它并停止抱怨quux()。但如果你想返回这个,那就不太可能是正确的。非常高的概率实际上意味着:
Bar^ quux() { return this; }
注意添加的^ hat
但是,返回this是非常奇怪的,因为调用quux()已经需要对对象的引用。换句话说,如果您现在使用Bar^ foo = obj->quux();
,那么您可以简单地编写Bar^ foo = obj;
并完成它。不知道你为什么要这么做
你应该这样写
Foo::Bar const& Foo::Bar::quux() {
return *this;
}
相关文章:
- 在 C++ 中返回新的构造函数(*this)工厂
- 为什么在通过引用返回运算符分配时取消引用'this'指针?
- 是否是从等待返回到悬而未决的"this"实例的未定义行为?
- 返回 *this 和 this - c++ 之间的区别
- 返回C++"This"对象的函数
- 返回带或不带 *this 的变量的确切方式不同 |这不是关于*此指针|正确性
- 返回 *this,尝试级联,并且不返回引用
- 从 const 成员函数返回 'this' 作为非常量
- 为什么有些类方法返回"*this"(self的对象引用)?
- C++对返回*this的成员函数的重复调用顺序
- 如何在php扩展中返回$this
- 为什么当这仍在传递时需要返回 *this
- 在类赋值操作符函数中,为什么必须返回*this ?
- 宏返回'this'指针,或 NULL (当指针不可用时)
- 继承返回*this的成员函数
- 返回this的右值引用的正确方法
- 在C++返回"this"?
- 在返回*this后调用析构函数
- 我可以有一个返回*this并处理非常量对象的const成员函数吗
- 如何在托管C++中正确实现类返回"this"的方法?