llvm-project

Форк
0
84 строки · 1.6 Кб
1
//
2
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
3
// See https://llvm.org/LICENSE.txt for license information.
4
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
5

6
#include <stdio.h>
7
#include <Block.h>
8

9
// CONFIG C++ rdar://6243400,rdar://6289367
10

11

12
int constructors = 0;
13
int destructors = 0;
14

15

16
#define CONST const
17

18
class TestObject
19
{
20
public:
21
	TestObject(CONST TestObject& inObj);
22
	TestObject();
23
	~TestObject();
24
	
25
	TestObject& operator=(CONST TestObject& inObj);
26

27
	int version() CONST { return _version; }
28
private:
29
	mutable int _version;
30
};
31

32
TestObject::TestObject(CONST TestObject& inObj)
33
	
34
{
35
        ++constructors;
36
        _version = inObj._version;
37
	//printf("%p (%d) -- TestObject(const TestObject&) called\n", this, _version); 
38
}
39

40

41
TestObject::TestObject()
42
{
43
        _version = ++constructors;
44
	//printf("%p (%d) -- TestObject() called\n", this, _version); 
45
}
46

47

48
TestObject::~TestObject()
49
{
50
	//printf("%p -- ~TestObject() called\n", this);
51
        ++destructors;
52
}
53

54

55
TestObject& TestObject::operator=(CONST TestObject& inObj)
56
{
57
	//printf("%p -- operator= called\n", this);
58
        _version = inObj._version;
59
	return *this;
60
}
61

62

63

64
void testRoutine() {
65
    TestObject one;
66
    
67
    void (^b)(void) = ^{ printf("my const copy of one is %d\n", one.version()); };
68
}
69
    
70
    
71

72
int main(int argc, char *argv[]) {
73
    testRoutine();
74
    if (constructors == 0) {
75
        printf("No copy constructors!!!\n");
76
        return 1;
77
    }
78
    if (constructors != destructors) {
79
        printf("%d constructors but only %d destructors\n", constructors, destructors);
80
        return 1;
81
    }
82
    printf("%s:success\n", argv[0]);
83
    return 0;
84
}
85

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.