水木社区手机版
首页
|版面-C++程序设计语言(CPlusPlus)|
新版wap站已上线
返回
下页
|
尾页
|
1/3
|
转到
主题:MSVC特有的关键字__interface,貌似是个大坑?
楼主
|
z16166
|
2022-03-21 21:57:33
|
只看此ID
文字发不出来,那就图片吧
--
FROM 114.241.228.*
1楼
|
z16166
|
2022-03-21 22:00:44
|
只看此ID
__interface没有dtor,也就没有virtual dtor。作为一个继承树的根,没有virtual dtor会导致各种不析构。
--
修改:z16166 FROM 114.241.228.*
FROM 114.241.228.*
2楼
|
Bernstein
|
2022-03-21 23:25:32
|
只看此ID
这是com里用的吧,应该有另外一套规则
【 在 z16166 的大作中提到: 】
: 文字发不出来,那就图片吧
: [upload=1][/upload]
--
FROM 221.218.211.*
3楼
|
z16166
|
2022-03-22 00:11:50
|
只看此ID
managed c++可以用,这有例子
http://www.functionx.com/vcnet/keywords/interface.htm
官方的例子貌似是COM,但有些诡异的语法,象这种。还是不进坑了。
https://docs.microsoft.com/en-us/cpp/cpp/interface?view=msvc-170
[module(name="test")];
[ object, uuid("00000000-0000-0000-0000-000000000001"), library_block ]
__interface IFace {
[ id(0) ] int int_data;
[ id(5) ] BSTR bstr_data;
};
[ coclass, uuid("00000000-0000-0000-0000-000000000002") ]
class MyClass : public IFace {
【 在 Bernstein 的大作中提到: 】
: 这是com里用的吧,应该有另外一套规则
:
--
FROM 114.241.228.*
4楼
|
dormouseBHU
|
2022-03-22 06:59:02
|
只看此ID
能举个例子吗?interface用了这么多年,没听谁说有问题。
【 在 z16166 的大作中提到: 】
: __interface没有dtor,也就没有virtual dtor。作为一个继承树的根,没有virtual dtor会导致各种不析构。
--
FROM 120.244.156.*
5楼
|
dormouseBHU
|
2022-03-22 09:07:35
|
只看此ID
COM 用 AddRef() 和 Release() 来做引用计数,Release()是虚函数,所以不会有楼主说的这个问题。
【 在 Bernstein 的大作中提到: 】
: 这是com里用的吧,应该有另外一套规则
:
--
FROM 115.171.60.*
6楼
|
z16166
|
2022-03-22 10:24:47
|
只看此ID
就是顶楼的那个程序例子,Derived1的析构不会被调用。
我记得好多年前用过__interface。
不让发文本。
【 在 dormouseBHU 的大作中提到: 】
: 能举个例子吗?interface用了这么多年,没听谁说有问题。
--
FROM 114.241.228.*
7楼
|
dormouseBHU
|
2022-03-22 11:28:38
|
只看此ID
IBase1 加个析构函数不行吗?
__interface IBase1{ void F(); ~IBase();}
【 在 z16166 的大作中提到: 】
: 就是顶楼的那个程序例子,Derived1的析构不会被调用。
: 我记得好多年前用过__interface。
: 不让发文本。
: ...................
--
FROM 115.171.61.*
8楼
|
z16166
|
2022-03-22 11:45:35
|
只看此ID
不能有析构
https://docs.microsoft.com/en-us/cpp/cpp/interface?view=msvc-170
A Microsoft C++ interface can be defined as follows:
Can inherit from zero or more base interfaces.
Cannot inherit from a base class.
Can only contain public, pure virtual methods.
Cannot contain constructors, destructors, or operators.
Cannot contain static methods.
Cannot contain data members; properties are allowed.
【 在 dormouseBHU 的大作中提到: 】
: IBase1 加个析构函数不行吗?
: __interface IBase1{ void F(); ~IBase();}
:
--
FROM 114.241.228.*
9楼
|
hgoldfish
|
2022-03-22 13:06:44
|
只看此ID
这个东东是模拟 java 的 interface 的吧。
是不是原本是 c 的东东?
msvc 里面留存了一些在 c 里面模拟 com 行为的私有技术。类似的还有 __try{}
【 在 z16166 (Netguy) 的大作中提到: 】
: 不能有析构
:
https://docs.microsoft.com/en-us/cpp/cpp/interface?view=msvc-170
: A Microsoft C++ interface can be defined as follows:
: ...................
--
修改:hgoldfish FROM 47.243.39.*
FROM 47.243.39.*
下页
|
尾页
|
1/3
|
转到
选择讨论区
首页
|
分区
|
热推
BYR-Team
©
2010.
KBS Dev-Team
©
2011
登录完整版